#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