2013-12-22 1 views
0

В настоящее время я работаю над текстовой приключенческой игрой. Это мое последнее задание на курс программирования, и я получил совет от одного из инструкторов использовать модуль для уменьшения количества кода для достижения этой цели:Индексы списка связывания с модулем, хотите сделать круговой список

def viable(self, north_south, east_west): 
    i = north_south.index(self) 
    j = east_west.index(self) 
    if i == 0: 
     south = north_south[len(north_south)-1] 
    else: 
     south = north_south[i-1] 
    if i == len(north_south)-1: 
     north = north_south[0] 
    else: 
     north = north_south[i+1] 
    if j == 0: 
     west = east_west[len(east_west)-1] 
    else: 
     west = east_west[i-1] 
    if j == len(east_west)-1: 
     east = east_west[0] 
    else: 
     east = east_west[j+1] 

    viable = [east, west, north, south] 
    return viable 

Если кто-нибудь может дать какие-либо предложения о том, как привязать последний индекс и первый индекс вместе?

ответ

0

Использование % модулей делает код намного проще, да, как это устраняет необходимость проверки на крайние случаи:

def viable(self, north_south, east_west): 
    i = north_south.index(self) 
    j = east_west.index(self) 

    south = north_south[(i - 1) % len(north_south)] 
    north = north_south[(i + 1) % len(north_south)] 
    west = east_west[(j - 1) % len(east_west)] 
    east = east_west[(j + 1) % len(east_west)] 

    return east, west, north, south 

Другими словами, просто добавить или вычесть из вашего индекса, а затем применить как модуль для «обертывания» на другую сторону.

Допустим, Ваша длина 5, то % 5 дает вам следующие результаты для различных случаев:

>>> 5 % 5 # last index + 1 
0 
>>> -1 % 5 # first index - 1 
4 
>>> 3 % 5 # middle + 1 
3 
+0

Благодаря Собираюсь применить это прямо сейчас :) – August