尝试从lis中删除项目时出现“IndexError:列表分配索引超出范围”

2024-04-24 23:29:18 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在尝试创建一个python应用程序,它将接受我的代码,创建一个包含歌曲的列表。然后从歌曲列表中随机选择的问题中创建一个随机问题。我知道。你知道吗

这是我的代码,希望有人能帮我。我似乎得到了一个错误:

'del question[count]
IndexError: list assignment index out of range'.

据我所知,我不认为这是超出范围,我花了几个小时试图找出它。这是我的代码:

import csv, random

#creating random questions
def random_songs(username):
    songBook = open('songs.csv', 'r')
    con_song = csv.reader(songBook)
    user = open('user_data.csv', 'a')
    con_user= csv.writer(user, delimiter = ',')
    class data():
        songs = []
        count = 0
        song_name = []
        artist_name = []
        song_answer = []
        song_question = []


    #Setting the song name and artist into a list.
    for i in con_song:
        for x in i:
            data.songs.append(x)

    #Splitting up the data from the csv file into song name and artist name.
    for length in range(0, len(data.songs)):
        if data.count % 2 == 0:
            data.song_name.append(data.songs[data.count])
            data.count += 1
        else:
            data.artist_name.append(data.songs[data.count])
            data.count += 1

    #Randomly chosing a song
    for i in range(0, 1):
        number = random.randint(0, len(data.song_name))
        data.song_answer.append(data.song_name[number])
    #Generating the question
    #print(data.song_answer)

    question = []
    for s in data.song_answer:
        question = list(s)
        print(s)
        length_s = int(len(s) -1)
        count = 1
        for i in range(length_s):
            if count <= length_s and count > 1:
                print('good')
                count = int(count)
                del question[count]
                count += 1
            else:
                print('bad')
                count += 1



random_songs('James')

以下是链接上的歌曲csv文件项目: https://drive.google.com/open?id=1LxPlKF0pduXE1_r7WWzlwzMZ0mKeY4yY

我希望,你能帮上忙,或者这件事解决后能帮上忙。你知道吗

提前谢谢。 詹姆斯·麦卡农


Tags: csvtheanswernameinfordatasong
2条回答

让我们改善你的循环。。你知道吗

第一个for循环似乎是合法的,所以你可以保留它,只要去掉count

for s in data.song_answer:
        questions = list(s)
        print(s)

第二个for循环可以这样替换:

for question in questions:
        print('good')
         questions.remove(question)

我们不需要在python中使用range,您可以在迭代时删除它。我没有测试这个,但如果问题是一个有效的列表,它应该工作。你知道吗

我不知道你想做什么,但希望这能给你指明正确的方向

import csv
import random

class Song:

    def __init__(self, name, artist):
        self.name = name
        self.artist = artist
        self.question = None
        self.answer = None

    def __str__(self):
        return f'{self.name} by {self.artist}'

    def __repr__(self):
        return self.__str__()

songBook = open('songs.csv', 'r')
songs = []
for i in songBook:
    # split gives you a list with the two fields
    x = i.split(',')
    songs.append(Song(x[0],x[1]))

for song in songs:
    self.answer = random.choice(songs).name

相关问题 更多 >