此代码用于从内部文件(文本文件)中选择一个艺术家,然后读取该文件,并从内部文件中随机选择艺术家(位于数组文件中的文本文件中,例如“胡萝卜苹果香蕉”),因此,我向选定的歌手添加了.txt,以便该程序将打开包含歌曲的歌手的文件,并随机选择一首歌曲。
import random
loop = False
counter = 0
points = 0
max_level = 10
while loop == False:
for lines in open("pick.txt").readlines():
art = lines.split()
artist = random.choice(art)
for i in open((artist) + ".txt"):
song = i.split()
song_name = random.choice(song)
print("the song begins with :" , song_name , "this song is by :" , artist)
answer = input("Enter full name of the song : ")
if answer == song_name:
points = points +3
print("correct")
counter = counter +1
print(counter)
elif answer != song_name:
print("WRONG !!! \n try again")
dec = input("Please enter the full name of the song :")
if dec == song_name:
points = points +2
print("correct")
counter = counter +1
print(counter)
elif dec != song_name:
print("smh \n WRONG")
counter = counter +1
print(counter)
elif counter >= max_level:
print("The End")
quit()
else:
print("error")
input()
之后,当我在python shell中运行代码时,有随机的机会我会立即或以后出现此错误:
raise IndexError('Cannot choose from an empty sequence') from None
IndexError: Cannot choose from an empty sequence
答案 0 :(得分:0)
从外观上看,该错误来自random
模块。可能是在您读取文件时,其中有一行空白。
原因通常是文件的最后一行,通常是空白的换行符/ EOF。
在读取文件时只需添加支票:
for line in open(artist + '.txt', 'r'):
if line.strip():
song = line.strip().split()
song_name = random.choice(song)
空行的“真实性”值为0或False
,因此包含内容的行将返回True
。
答案 1 :(得分:0)
您的错误可能是由其中一个文本文件中的空行引起的。
我能够用您的确切代码和以下文本文件复制您的错误:
pick.txt仅包含单词adele, 和adele.txt,并带有“来自对方的问候”和两行。
您可以在序幕中对此进行测试:
>>> for i in open("adele.txt"):
... song = i.split()
...
>>> song
[]
另一方面,在对行中的数据执行任何操作之前,似乎要遍历文本文件中的各行。那可能没有道理。我建议您在添加内容时将其添加到列表中,然后从该列表中进行选择。