我在尝试完成我的项目时遇到非常奇怪的错误

时间:2018-11-10 20:57:08

标签: python random

此代码用于从内部文件(文本文件)中选择一个艺术家,然后读取该文件,并从内部文件中随机选择艺术家(位于数组文件中的文本文件中,例如“胡萝卜苹果香蕉”),因此,我向选定的歌手添加了.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

2 个答案:

答案 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
[]

另一方面,在对行中的数据执行任何操作之前,似乎要遍历文本文件中的各行。那可能没有道理。我建议您在添加内容时将其添加到列表中,然后从该列表中进行选择。