Python 3.7.3歌曲猜测代码的代码不一致,会在随机时间停止工作

时间:2019-09-16 09:29:28

标签: python-3.x

我有一个python代码,是一个猜歌游戏,为您提供了歌手和歌曲的首字母,我使用了2个2d数组,分别是歌手和其他人。我知道我应该做一个3d数组,但是要把它更改到我的代码中得这么晚,我必须重新组织整个代码,而我没有时间。以下是适当的代码:

                    attemptnum = 5                

                    attempts = 0               
                    for x in range (10):
                        ArtCount = len(artist)
                        print(ArtCount)
                        randNum = int(random.randint(0, ArtCount))
                        randArt = artist[randNum]
                        ArtInd = artist.index(randArt)# catches element position (number)
                        songSel = songs[randNum]
                        print ("The artist is " + randArt)
                        time.sleep(1)

                        print( "The songs first letter be " + songSel[0])
                        time.sleep(1)
                        print("")
                        question = input("What song do you believe it to be? ")
                        if question == (songSel) or ("c"):
                            songs.remove(songSel)
                            artist.remove(randArt)
                            print ("Correct")
                            print ("Next Question")







                        else:
                            attempts = attempts + 1
                            att = attemptnum = attemptnum - attempts
                            print("")
                            print("Wrong,")
                            print (att) and print (" attempts left.")
                            print("")
                            time.sleep(0.5)

                            if attempts == 5:
                                print("GAME OVER")
                                #input leaderboard here
                                print("Exiting in 3 seconds")
                                time.sleep(3)
                                exit()

很抱歉,如果我的代码不够完善,这是一个学校项目。因此,这段代码的作用是随机地分配一个从0到艺术家列表中有多少个元素的数字。然后,它使用随机数选择一个艺术家,它捕获带有索引的数字,以便可以将其用于歌曲数组以获取相应的歌曲(我知道非常糟糕)。它提出问题并显示歌曲的第一个字母。如果您获得这首歌,您将再次获得相同的代码,但会删除前一首歌和歌手,以防止重复。这就是问题所在,通常在运行代码时,它会随机给我一个我要输出的元素不在列表中的错误:

                    randArt = artist[randNum]
                    IndexError: list index out of range

当您被问到问题时,这可能会在代码的任何地方发生,您可以进入问题3并获取错误,或者甚至不进入问题9并获取错误。这是完全随机的。我感觉它试图偶尔获得被删除的歌手和歌曲,但这没有任何意义,因为它仅从列表中计算的数量中选择,而不是原始的10。我不确定我的方式说这是对的,或者是否有人会理解,因为我肯定不是。为了明确起见,我的代码计算了列表中有多少个元素,使用该数字来查找歌曲和歌手,然后将其删除以停止复制,但是从我看来,这似乎是它试图查找并简单地找出元素实际上有多少个元素的范围。感谢您提供我的业余代码。

1 个答案:

答案 0 :(得分:1)

random.randint在两端都包含在内。 randint(0, 10)将返回范围内的数字

0 <= _ <= 10

但是Python使用基于0的索引。

如果li[1, 2, 3],则len(li)为3,但li[3]不存在。

只有li[0]li[1]li[2]这样。


做事时

ArtCount = len(artist)
randNum = int(random.randint(0, ArtCount))
randArt = artist[randNum]

您要输入0 <= n <= len(artist)范围内的数字。如果n == len(artist),则artist[n]将导致IndexError

BTW,randint返回一个int(因此,其名称为int)。 int(randint(...))完全没有必要。

您应该要求输入0 <= n <= len(artist) - 1范围内的随机数,或者直接使用random.choice

randArt = random.choice(artist)

您可能想捕获IndexError,以防artist为空列表:

try:
    randArt = random.choice(artist)
except IndexError:
    print('artist list is empty')