Python 我正在创作一个音乐测验,但似乎在测验中的随机点上得到同样的错误。
我的代码旨在:Python 我正在创作一个音乐测验,但似乎在测验中的随机点上得到同样的错误。,python,Python,我的代码旨在: 在外部文件中存储歌曲名称和艺术家的列表 从文件中选择一首歌曲,显示艺术家和歌曲标题每个单词的第一个字母 允许用户最多两次猜测歌曲名称,如果第二次猜错歌曲,则停止游戏 如果猜测是正确的,根据猜测的次数将分数加到玩家的分数上 歌曲和艺术家名称将从阵列/外部文件中删除 显示游戏结束时玩家的点数 目前,我的代码在回答问题和给出错误时被卡住: ChosenSong=(歌曲[随机编号]) 索引器:列表索引超出范围 无论如何,修复这将是伟大的 当前我的代码如下所示: import random
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
随机导入
分数=0
x=1
SongArtists=open(“Songs and Artists.txt”、“r”)
ReadValues=SongArtists.readline()
歌曲=[]
艺术家=[]
而len(歌曲)
此处:
RandomNumber = (randint(0,len(songs)))
RandomNumber = RandomNumber + 1
如果您的随机数在初始化时等于len(歌曲),则它已超出歌曲
范围
根据randint(a,b),返回
一个随机整数N,这样a问题在于你的随机歌曲机制。randint()返回一个介于范围(包括极值)之间的数字。所以你基本上得到了一个介于1和len(歌曲)+1之间的随机数,这是你不想要的,因为索引以len(歌曲)-1结尾
所以你应该做些什么
RandomNumber = random.randint(0, len(songs)-1)
ChosenSong = songs[RandomNumber]
你应该看看<代码> RANTENT <代码>如何使用它的边界,并且在选择一个随机索引之后,肯定重新考虑添加一个。考虑使用<代码>随机。选择< /C> >选择一个集合的一个随机元素,而不是手动生成索引。RandomNumber=RandomNumber+1
会导致RandomNumber等于len(歌曲)。但是歌曲的最高索引是len(songs)-1,因为数组索引从零开始。如果它等于len(songs)
,则在将1添加到它之前,它已经超出了范围!
RandomNumber = random.randint(0, len(songs)-1)
ChosenSong = songs[RandomNumber]