我有一个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。我不确定我的方式说这是对的,或者是否有人会理解,因为我肯定不是。为了明确起见,我的代码计算了列表中有多少个元素,使用该数字来查找歌曲和歌手,然后将其删除以停止复制,但是从我看来,这似乎是它试图查找并简单地找出元素实际上有多少个元素的范围。感谢您提供我的业余代码。
答案 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')