我尝试使用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'
我真的很想知道是否有一种不同的方法(理论上)以相同的方式工作,有没有模块
提前感谢所有在这件事上帮助我的人
对不起,如果我的英语听起来不好,我是巴西人,这是我第一次来这里
这里有两个问题:
1)在Python中,不声明变量类型(即
list
或int
)2)您的
while
循环超出了列表的长度-它从0到4(包括)进行迭代,即5次而不是4次以下是一些应该有效的更改:
逐行:
如果用方括号指定一个变量,它将自动成为一个列表,因此您不必声明它(并且无论如何都需要括号才能工作,即
list(['a', 'b'])
此外,命名变量
var
不是一个非常具有描述性的选择,类似letters
的东西可能会更好。因此:同样,如果类型是隐式的,则不需要声明该类型。
n = 0
将使n
自动成为int
,因此:在这里,您首先增加
n
,然后使用它对var
进行索引,但是var
作为一个列表,从0开始,var[3]
是最后一个元素,因此您希望以另一种方式:但是,在Python中循环列表要容易得多,这更好:
这是首选,因为您不需要
n
做任何其他事情,所以这更有效、更可读整个计划是:
问题是在Python中,列表从索引0开始。您的列表有4项,因此最高索引为3。条件
n <= 4
将允许循环在n为4时继续运行,因此它会抛出一个错误,因为4大于最高索引(3)您可以通过将
n <= 4
更改为n < 4
,甚至n < len(var)
来修复它,因此不管有多少项另一个问题是在从列表中读取索引处的值之前增加了
n
。要解决此问题,请将n = n + 1
放在print(var[n])
之后相关问题 更多 >
编程相关推荐