Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我正在创作一个音乐测验,但似乎在测验中的随机点上得到同样的错误。_Python - Fatal编程技术网

Python 我正在创作一个音乐测验,但似乎在测验中的随机点上得到同样的错误。

Python 我正在创作一个音乐测验,但似乎在测验中的随机点上得到同样的错误。,python,Python,我的代码旨在: 在外部文件中存储歌曲名称和艺术家的列表 从文件中选择一首歌曲,显示艺术家和歌曲标题每个单词的第一个字母 允许用户最多两次猜测歌曲名称,如果第二次猜错歌曲,则停止游戏 如果猜测是正确的,根据猜测的次数将分数加到玩家的分数上 歌曲和艺术家名称将从阵列/外部文件中删除 显示游戏结束时玩家的点数 目前,我的代码在回答问题和给出错误时被卡住: ChosenSong=(歌曲[随机编号]) 索引器:列表索引超出范围 无论如何,修复这将是伟大的 当前我的代码如下所示: import random

我的代码旨在:

  • 在外部文件中存储歌曲名称和艺术家的列表

  • 从文件中选择一首歌曲,显示艺术家和歌曲标题每个单词的第一个字母

  • 允许用户最多两次猜测歌曲名称,如果第二次猜错歌曲,则停止游戏

  • 如果猜测是正确的,根据猜测的次数将分数加到玩家的分数上

  • 歌曲和艺术家名称将从阵列/外部文件中删除

  • 显示游戏结束时玩家的点数

  • 目前,我的代码在回答问题和给出错误时被卡住: ChosenSong=(歌曲[随机编号]) 索引器:列表索引超出范围

    无论如何,修复这将是伟大的

    当前我的代码如下所示:

    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]