Python3.8.x如何使用var作为列表索引

2024-06-09 09:00:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用var作为列表索引,因为我正在编写一个代码,作为我自己的密码的密码破译器。但我的尝试返回的索引器:列表索引超出范围

我的全部代码如下:

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' 

我真的很想知道是否有一种不同的方法(理论上)以相同的方式工作,有没有模块

提前感谢所有在这件事上帮助我的人

对不起,如果我的英语听起来不好,我是巴西人,这是我第一次来这里


Tags: and代码in密码列表intabcelif
3条回答

这里有两个问题:

1)在Python中,不声明变量类型(即listint

2)您的while循环超出了列表的长度-它从0到4(包括)进行迭代,即5次而不是4次

以下是一些应该有效的更改:

var = ['a', 'b', 'c', 'd']
n = 0
while n < 4:
    print(var[n])
    n = n + 1
print('finish')

逐行:

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')

问题是在Python中,列表从索引0开始。您的列表有4项,因此最高索引为3。条件n <= 4将允许循环在n为4时继续运行,因此它会抛出一个错误,因为4大于最高索引(3)

您可以通过将n <= 4更改为n < 4,甚至n < len(var)来修复它,因此不管有多少项

另一个问题是在从列表中读取索引处的值之前增加了n。要解决此问题,请将n = n + 1放在print(var[n])之后

相关问题 更多 >