Python не позволяет мне добавлять в мой словарь?

#python #dictionary #runtime-error

#питон #словарь #ошибка во время выполнения

Вопрос:

Я пишу код для gcse (не часть теста), где у меня есть внешний файл с песнями и исполнителем, который их создал, и, учитывая первые буквы каждого слова, правильно угадайте название песни. В коде (ниже) Я открываю файл и, в зависимости от того, содержит ли строка название песни или имя исполнителя, я добавляю его в словарь песен {} или исполнителей {} с правильным номером, но я получаю это сообщение об ошибке, когда запускаю его через свой терминал:

Файл «task1gcse.py «, строка 21, в песнях[f»Песня {Номер строки}»] = ((«{строка}».формат(строка=строка)).полоса («n»)) # например {‘Песня 4’: ‘Эй, Джуд’} Ошибка типа: объект ‘_io.TextIOWrapper’ не поддерживает назначение элемента

Вот код:

 # task 1 gcse 20 hr computing challenge
from random import *
import time


lineNumber = 0
artists = {}
artistNumber = 0
songs = {}
songNumber = 0
lines = {}


with open("songs.txt", "r") as songs: # opening the file
    for line in (songs):
        if line != "n": # to ignore any blank lines
            lineNumber  = 1
            lines[f"Line {lineNumber}"] = (("{line}".format(line=line)).strip("n")) # so e.g. {'Line 2': 'John Lennon'}, but I won't be using this it's just for testing
            if lineNumber % 2 != 0: # if the line number is an even number, that line contains the name of a song
                songNumber  = 1
                songs[f"Song {lineNumber}"] = (("{line}".format(line=line)).strip("n")) # e.g. {'Song 4': 'Hey Jude'}
            elif lineNumber % 2 == 0: # if the line number is an odd number, that line contains the name of an artist
                artistNumber  = 1
                artists[f"Artist {lineNumber}"] = (("{line}".format(line=line)).strip("n")) # e.g. {'Artist 3': 'Avicii'}
        else:
            continue # if the line is blank; continue

 

Это странно, потому что это работало только для словаря lineNumber… Пожалуйста, помогите, любой был бы очень признателен. Спасибо!

Комментарии:

1. Вы пытаетесь использовать имя songs для двух разных вещей — открытого файла и dict . Переименуйте один из них.

Ответ №1:

Когда вы запускаете with open("songs.txt", "r") as songs: # opening the file , вы переопределяете уже существующий songs словарь — поэтому songs[f"Song {lineNumber}"] = ... при запуске вы пытаетесь добавить его в открытый файл. Переименуйте одну из этих переменных, чтобы устранить эту проблему. Например —

 # task 1 gcse 20 hr computing challenge
from random import *
import time


lineNumber = 0
artists = {}
artistNumber = 0
songs = {}
songNumber = 0
lines = {}


with open("songs.txt", "r") as songs_file: # opening the file
    for line in (songs_file):
        if line != "n": # to ignore any blank lines
            lineNumber  = 1
            lines[f"Line {lineNumber}"] = (("{line}".format(line=line)).strip("n")) # so e.g. {'Line 2': 'John Lennon'}, but I won't be using this it's just for testing
            if lineNumber % 2 != 0: # if the line number is an even number, that line contains the name of a song
                songNumber  = 1
                songs[f"Song {lineNumber}"] = (("{line}".format(line=line)).strip("n")) # e.g. {'Song 4': 'Hey Jude'}
            elif lineNumber % 2 == 0: # if the line number is an odd number, that line contains the name of an artist
                artistNumber  = 1
                artists[f"Artist {lineNumber}"] = (("{line}".format(line=line)).strip("n")) # e.g. {'Artist 3': 'Avicii'}
        else:
            continue # if the line is blank; continue