Python — как непрерывно считать индекс списка без использования библиотек?

#python

#python

Вопрос:

Ниже у меня есть список строчного алфавита. Моя задача — получить индекс строчной буквы из списка и добавить сдвиг. Сдвиг может варьироваться и отличаться от 1000. Это также может быть 50000 или 10 и т.д. Если индекс сдвиг больше 25, он должен продолжать отсчет от «a» до тех пор, пока (индекс сдвиг) не будет достигнут и не вернет букву. Мне не разрешено использовать библиотеки.

Мое решение не работает для больших сдвигов, таких как 1000

 shift = 1000
alphaList = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

index = alphaList.index('u')
index = (index   shift) - len(alphaList)   # this part has to be adjusted 
print(index)
print(alphaList[index])
  

Результат должен быть: ‘g’

что я получаю:

 ---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-20-8d37e597ee25> in <module>
      5 index = (index   shift) - len(alphaList)
      6 print(index)
----> 7 print(alphaList[index])

IndexError: list index out of range
----------------------------------------------------------------------------
  

Комментарии:

1. Вам нужно исследовать оператор модуля.

Ответ №1:

Вы ищете оператор по модулю. Из документации (курсив мой):

Оператор % (по модулю) выдает остаток от деления первого аргумента на второй.Числовые аргументы сначала преобразуются в общий тип. Аргумент с нулевым значением right вызывает исключение ZeroDivisionError. Аргументами могут быть числа с плавающей запятой, например, 3,14% 0,7 равно 0,34 (поскольку 3,14 равно 4*0.7 0.34 .) Оператор по модулю всегда выдает результат с тем же знаком, что и его второй операнд (или ноль); абсолютное значение результата строго меньше абсолютного значения второго операнда

 index = (index   shift) % len(alphaList) 
  

Ответ №2:

Вместо этого используйте оператор модуля здесь:

 index = (index shift) % len(alphaList)