为什么我得到这个索引超出范围错误?
我是 Python 的初学者,我正在编写一些代码,从列表中随机选择一个字母,打印它,然后从列表中删除它,这样它就不会被再次选中。循环通过 while 循环重复。
import random
list = ["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"]
yn = "y"
while yn == "y":
npat = random.randint(0, 25)
print(list[npat])
del list[npat]
yn = input("Again?: ")
它工作正常,但有时,选择的随机数显示在索引范围之外。
IndexError: list index out of range
在我看来它应该可以正常工作,但存在问题。有谁能指点一下吗?
回答
每次你del list[npat],列表都会变短。最终random.randint(0, 25)会给你一个越界的索引。
无关:list是一个错误的变量名,因为您正在屏蔽list内置函数。
回答
首先,不要调用 list list。给它另一个名字。
问题是每次收到一封信后,你都会删除那封信。所以如果列表是[1,2,3]并且我得到3,3则被删除。
发生这种情况时,列表现在只有 2 个项目。早些时候,list[2]会工作。现在3已经list[2]没有了,不存在了。
您要么必须删除删除功能,要么必须设置一个变量,该变量在每次选择一个字母时都会减小,并获得随机数:
import random
lista = ["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"]
yn = "y"
max = 25
while yn == "y":
npat = random.randint(0, max)
print(npat)
print(lista[npat])
del lista[npat]
max = max - 1
yn = input("Again?: ")