Python3 .8.x - Как мне использовать var в качестве индекса списка - PullRequest
0 голосов
/ 03 февраля 2020

Я пытался использовать переменную как индекс списка, потому что я пишу код, чтобы расшифровать код моей собственной криптографии. Но моя попытка вернула IndexError: list index вне диапазона.

Весь мой код ниже:

abc = 'abcdefghijklmnop'
dcd = ['', '', '', '']
n1 = int(0)
n2 = int(1)
n3 = int(2)
n4 = int(3)
n5 = int(4)


varA = input('digite o codigo: ')
while n1<5:
    n1 = n1+1
    n2 = n2+1
    n3 = n3+1
    n4 = n4+1
    n5 = n5+1
    if (varA[n1] == 'y' and varA[n2] in abc):
        dcd[n1] = 'a'
    elif (varA[n1] == 'y' and varA[n2] in abc and varA[n3] in abc):
        dcd[n1] = 'b'
    elif (varA[n1] == 'y' and varA[n2] in abc and varA[n3] in abc and varA[n4] in abc):
        dcd[n1] = 'c' 

Я действительно хочу знать, есть ли другой метод с или без модулей, которые работают ( в теории) тоже самое.

И заранее спасибо всем, кто помогает мне в этом вопросе.

OBS: Извините, если мой Engli sh звучит плохо, я бразилец и это мой первый раз в StackOverFlow.

Ответы [ 4 ]

1 голос
/ 03 февраля 2020

Здесь две проблемы:

1) В Python вы не объявляете типы переменных (т. Е. list или int)

2) Ваш while l oop выходит за пределы длины вашего списка - он повторяется от 0 до 4 (включительно), то есть 5 раз вместо 4 .

Вот некоторые изменения, которые должно работать:

var = ['a', 'b', 'c', 'd']
n = 0
while n < 4:
    print(var[n])
    n = n + 1
print('finish')
0 голосов
/ 03 февраля 2020

Я не понял, что вы пытаетесь сделать, так или иначе, я думаю, что вы думаете как C язык. В python у вас нет счетчика. Список - это Itarable. Чтобы иметь итератор над своим списком, вы можете сделать что-то вроде:

var = list['a', 'b', 'c', 'd']

for index in var:
  print(index)

ИЛИ:

var = list['a', 'b', 'c', 'd']

print(var[0], var[1], var[2], var[3])
0 голосов
/ 03 февраля 2020

Строка за строкой:

var = list['a', 'b', 'c', 'd']

Если вы присваиваете переменную в квадратных скобках, это автоматически список, так что вам не нужно его указывать (и в любом случае для его работы понадобятся скобки, т.е. list(['a', 'b'])

Кроме того, присвоение имени переменной var не очень описательный выбор, что-то вроде letters, вероятно, будет лучше. Итак:

characters = ['a', 'b', 'c', 'd']
n = int(0)

Опять вам не нужно объявлять тип, если он неявный. n = 0 приведет к тому, что n автоматически станет int, поэтому:

n = 0
while n<=4:
    n=n+1
    print(var[n])

Здесь вы сначала увеличите n, а затем используйте его для индексации var, но var как список, начинается с 0, а var[3] - последний элемент, поэтому вы хотите, чтобы наоборот:

while n <= 4:
    print(var[n])
    n = n + 1

Однако зацикливание списка можно сделать намного проще в Python, это лучше:

for ch in characters :
    print(ch)

Это предпочтительнее, так как вам не нужно n для чего-либо еще, так что это является более эффективным и более читабельным.

Вся программа тогда:

characters = ['a', 'b', 'c', 'd']
for ch in characters :
    print(ch)
print('finish')
0 голосов
/ 03 февраля 2020

Проблема в Python, списки начинаются с индекса 0. Ваш список содержит 4 элемента, поэтому самый высокий индекс равен 3. Условие n <= 4 позволит l oop продолжить работу, когда n равно 4, и, таким образом, выдает ошибку, так как 4 больше вашего самого высокого индекса (3).

Вы можете исправить это, изменив n <= 4 на n < 4 или даже n < len(var), поэтому не имеет значения, как Есть много элементов.

Другая проблема заключалась в том, что вы увеличили n перед чтением значения по индексу из вашего списка. Чтобы это исправить, поставьте n = n + 1 после print(var[n])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...