我正在遇到一个问题。
Traceback (most recent call last): File "H:\Documents\game.py", line 73, in <module> if attemptThis[i] != target[i]: IndexError: string index out of range Press any key to continue . . .
运行这段代码时出现错误。
#-----------------------------------------------------
# Python 'Evolution of Text' Program
# More programs at: usingpython.com/programs
#-----------------------------------------------------
possibleCharacters = string.ascii_uppercase + ' .!?;:='
target = """
lMMMMMMMM .MMMM= MMM MMM
lMM MMl M=M MMM =MM MMM
lMM M=. MMM M=M= M=MM=MM =M===== M=MMMM= M=M MM=MMM==l ==M===M= MMM MMMM =M=MM==MM
lMM M=. MMM== MMM .== ==M.... =l= l===l=M. MMM .MMM MMM= MMM
lMM====== MMM MM======== ......=ll .....MMl lll =MM =MM l==....M=M =MM MMM
lM= M=M M=====M =====M=M =======MM .M===MMM MMM =M====MMM MMM MMM
"""
attemptThis = ''.join(random.choice(possibleCharacters) for i in range(len(target)))
attemptNext = ''
completed = False
generation = 0
while completed == False:
print(attemptThis)
attemptNext = ''
completed = True
for i in range(len(target)):
if attemptThis[i] != target[i]:
completed = False
attemptNext += random.choice(possibleCharacters)
else:
attemptNext += target[i]
if generation == 1000:
break
generation += 1
attemptThis = attemptNext
我在这里找到了这段代码(链接),并根据自己的需求进行了修改。在添加退出条件之前,它是可以正常工作的。
if generation == 1000:
break
我把它添加进去是因为生成ASCII所需的时间太长了。我正在一个小项目中使用这个作为标题屏幕,所以将其修复并不是非常关键,我可以随时返回到使用Print """Text Here"""
命令。
len(target)
是6,那么range(len(target))
将会给出0,1,2,3,4,5。更有可能的是attemptNext
比target
短。 - cdarkeattemptThis = attemptNext
。 - Håken LidattemptThis
打印出来的内容是垃圾信息,但我并没有看到你所描述的错误。在 OS X 上通过 2.7.10 和 3.5.1 版本测试过。 - cdarkeattemptThis
应该在while
循环的每次迭代中构建为与target
相同的大小,因此我不明白它们如何长度不同。 - Tadhg McDonald-Jensen