«IndexError: индекс назначения списка вне диапазона» при попытке удалить элемент из списка - PullRequest
0 голосов
/ 04 октября 2018

в данный момент я пытаюсь создать приложение на 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

Я надеюсь, что вы можете помочь, или это поможет вам, когда-нибудь решено,

Заранее спасибо.Джеймс Макканнон

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

У меня нет точного представления о том, что вы пытаетесь сделать, но надеюсь, что это укажет вам правильное направление

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
0 голосов
/ 04 октября 2018

Позволяет улучшить ваш цикл.

Первый цикл for кажется правильным, поэтому вы можете сохранить его, просто удалите счетчик

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

Второй цикл for можно заменить следующим образом:

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

Нам не нужно использовать диапазон в Python, который вы можете удалить при итерации.Я не проверял это, но если вопросы являются действительным списком, они должны работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...