while循环:列表索引超出范围

时间:2018-04-04 11:38:46

标签: python python-3.x

我一直在创建一个搜索两个列表的功能,并检查一个字符是否在两个列表中。错误

  

“IndexError:列表索引超出范围”

不断上升。我把它放在python Tutor中,似乎while循环完全被忽略了。我正在编码这个搜索而不使用if语句中的in函数。任何帮助将不胜感激!

这是我的代码:

aList = ["B" , "S" , "N" , "O" , "E" , "U" , "T" ]
userInput = "TOE"
userInputList = list(userInput)
letterExists = 0

while (letterExists < len(userInput)):
    for i in aList:
        if (i == userInputList[letterExists]):
            letterExists +=1

if (letterExists == len(userInput)):
        print("This word can be made using your tiles")

3 个答案:

答案 0 :(得分:1)

letterExists < len(userInput)仅保证还有1个字母可以处理,但您可以通过for循环迭代1次以上。

顺便说一句,你可以使用set非常好地写出这个条件:

the_set = set(["B", "S", ...])
if(all(x in the_set for x in userInput)):
   ...

答案 1 :(得分:0)

你可以使用python magic并像这样写:

len([chr for chr in userInput if chr in aList]) == len(userInput)

答案 2 :(得分:0)

查看您的代码并且没有尝试做得更好,我发现在break增加后缺少letterExists。这是固定代码:

aList = ["B" , "S" , "N" , "O" , "E" , "U" , "T" ]
userInput = "TOE"
userInputList = list(userInput)
letterExists = 0

while (letterExists < len(userInput)):
    for i in aList:
        if (i == userInputList[letterExists]):
            letterExists +=1
            break

if (letterExists == len(userInput)):
        print("This word can be made using your tiles")

但是,更好的pythonic解决方案如下(与 xtofl 的答案相同):

aList = ["B" , "S" , "N" , "O" , "E" , "U" , "T" ]
userInput = "TOF"

a = all([letter in aList for letter in userInput])

if (a):
    print("This word can be made using your tiles")