【问题标题】:Whenever User Inputs, hits an Out Of Range Error每当用户输入时,遇到超出范围的错误
【发布时间】:2016-12-22 13:39:46
【问题描述】:
userInput = input();

for x in range(0,len(userInput)):
    if(userInput[x] == " "):
        spaceValue = x;
rawWord = userInput[0:spaceValue];
secWord = userInput[spaceValue+1:];
wordArray = [];
repeats = len(rawWord); #NEW VAR

if (len(rawWord) == len(secWord)):
    for x in range(0,len(rawWord)):
        wordArray.append(secWord[x]);
    for x in range(0,len(rawWord)):
        for z in range(0,len(rawWord)):
            if((rawWord[x] == wordArray[z])): #Line 15 #repeats insted of wordArray[z]
                wordArray.remove(rawWord[x]);
                repeats = repeats - 1;
                break;

    if(len(wordArray) == 0):
        print("YES");
    else:
        print("NO");
else:
    print("NO");

如果两个单词长度相同且字母相同,则代码应打印 YES,否则打印 NO。

第 15 行出现错误: if((rawWord[x] == wordArray[z])):
IndexError: list index out of range

  1. 单词长度相同字母相同
  2. 字词长度不同
  3. 单词长度相同所有字母都不同

当它不起作用时

  1. 单词长度相同字母不同至少有一个字母相同

【问题讨论】:

  • 必须是len(...) - 1。如果是len(...),它将过去。
  • 顺便说一句,range(0, len(userInput)) == range(len(userInput))
  • 你说的是哪个len(...),有很多。全部?
  • 您正在循环访问 for z in range(0,len(rawWord)): 并索引到 wordArray 您从循环中删除的内容。
  • @doctorlove 所以每当我删除一个值时,我需要少循环 1 次?

标签: python python-3.x outofrangeexception


【解决方案1】:

正如我在评论中指出的那样,您正在循环 for z in range(0,len(rawWord)):,但索引到 wordArray,您会从循环中删除内容。

如果您要删除循环播放的内容,请务必担心。

我可以建议一个更好/更 Pythonic 的解决方案吗?

from itertools import permutations

userInput = input()
words = userInput.split(' ')
rawWord = words[0]
otherWords = [''.join(p) for p in permutations(words[1])]
if rawWord in otherWords:
    print("YES")
else:
    print("NO")

我们可以使您的工作正常 - 当您索引到第 15 行的 wordArray 或第 15 行时,不要忘记使用您的重复计数。 我还删除了一些不需要的标点符号。

userInput = input()

for x in range(0,len(userInput)):
    if userInput[x] == " ":
        spaceValue = x
rawWord = userInput[0:spaceValue]
secWord = userInput[spaceValue+1:]
wordArray = [];
repeats = len(rawWord)

if len(rawWord) == len(secWord):
    for x in range(0,len(rawWord)):
        wordArray.append(secWord[x])
    for x in range(0,len(rawWord)):
        for z in range(0,len(rawWord)):
            if (rawWord[x] == wordArray[z-repeats]): #Line 15
                wordArray.remove(rawWord[x])
                repeats = repeats - 1
                break;

    if(len(wordArray) == 0):
        print("YES")
    else:
        print("NO")
else:
    print("NO")

【讨论】:

  • 感谢第一个完美无瑕(ofc 和第二个),但我会保留第一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多