python - 我正在创建一个音乐测验,但似乎在测验中间的随机点出现相同的错误
问题描述
我的代码旨在:
将歌曲名称和艺术家列表存储在外部文件中。
从文件中选择一首歌曲,显示艺术家和歌曲标题每个单词的首字母。
允许用户最多有两次机会猜出歌曲的名称,如果他们在第二次猜出错误的歌曲时停止游戏。
如果猜对了,根据猜的次数将分数加到玩家的分数上。
歌曲和艺术家的名字从阵列/外部文件中删除。
显示游戏结束时玩家拥有的点数。
目前我的代码在回答问题并给我错误时卡住了: ChosenSong = (songs[RandomNumber]) IndexError: list index out of range
无论如何解决这个问题会很棒!
目前我的代码如下所示:
import random
points = 0
x = 1
SongArtists = open("Songs and Artists.txt","r")
ReadValues = SongArtists.readline()
songs = []
artists = []
while len(songs) < len(ReadValues):
field = ReadValues.split(",")
songTitle = field[0]
artistName = field[1]
songs.append(songTitle)
artists.append(artistName)
ReadValues = SongArtists.readline()
print("")
from random import *
while x == 1:
RandomNumber = (randint(0,len(songs)))
RandomNumber = RandomNumber + 1
ChosenSong = (songs[RandomNumber])
print("")
print(artists[songs.index(ChosenSong)])
print("")
Field = ChosenSong.split(" ")
lenOfField = len(Field)
if lenOfField == 1:
letter = Field[0]
print(letter[ : 1])
songs.pop(RandomNumber)
artists.pop(RandomNumber)
elif lenOfField == 2:
letter = Field[0]
secondletter = Field[1]
print((letter[ : 1])+" "+(secondletter[ : 1]))
songs.pop(RandomNumber)
artists.pop(RandomNumber)
elif lenOfField == 3:
letter = Field[0]
secondletter = Field[1]
thirdletter = Field[2]
print((letter[ : 1])+" "+(secondletter[ : 1])+" "+(thirdletter[ : 1]))
songs.pop(RandomNumber)
artists.pop(RandomNumber)
elif lenOfField == 4:
letter = Field[0]
secondletter = Field[1]
thirdletter = Field[2]
fourthletter = Field[3]
print((letter[ : 1])+" "+(secondletter[ : 1])+" "+(thirdletter[ : 1])+" "+(fourthletter[ :1]))
songs.pop(RandomNumber)
artists.pop(RandomNumber)
elif lenOfField == 5:
letter = Field[0]
secondletter = Field[1]
thirdletter = Field[2]
fourthletter = Field[3]
fifthletter = Field[4]
print((letter[ : 1])+" "+(secondletter[ : 1])+" "+(thirdletter[ : 1])+" "+(fourthletter[ :1])+" "+(fifthletter[ :1]))
songs.pop(RandomNumber)
artists.pop(RandomNumber)
print("")
guess = input("What is your guess : ").title()
if guess == ChosenSong:
points += 3
print("Correct, You get 3 points! You're score is", points)
else:
print("")
print("Wrong, If you get this wrong You Lose ")
secondguess = input("What is your guess : ")
if secondguess == ChosenSong:
points += 1
print("Correct, You get 3 points! You're score is", points)
else:
print("Game Over, You Scored " + str(points) + " points")
ScoreFile = open("Scores.txt","a")
ScoreFile.write(str(points))
ScoreFile.write("\n")
break
解决方案
这里:
RandomNumber = (randint(0,len(songs)))
RandomNumber = RandomNumber + 1
如果您的 RandomNumber 在初始化时等于 len(songs),则它已经超出songs
范围。
根据Python 文档randint(a, b) 返回a random integer N such that a <= N <= b
.
所以删除第二行,第一行变成:
RandomNumber = (randint(0, len(songs) - 1))
推荐阅读
- ios - SwiftUI 在数据模型中设置默认值
- c++ - 我不明白为什么这个解决方案有效。(整数溢出)
- c - C ABI 浮点结构作为参数
- python - Pandas:列计数不同列中值的有序出现
- ngx-bootstrap - 在已经选择了一些值之后,ngx-bootstrap typeahead 是否仍有可能提供更多值的建议?
- django - 如何使用 Django 在首页创建搜索栏,然后重定向到搜索结果?
- r - 如何使用熔化或聚集功能将 6 个特定列堆叠在 2 列中?
- reactjs - React 多文件上传器组件重复上传文件
- terraform - EC2 资源的 Terraform 动态标记失败,并显示“此处不应出现“标签”类型的块”
- c++ - 如何在 C++ 中打印具有第一个和第二个 2 类的对向量?