使用的元组如下:
Album = namedtuple('Album', 'id artist title year songs')
# id is a unique ID number; artist and title are strings; year is a number,
# the year the song was released; songs is a list of Songs
Song = namedtuple('Song', 'track title length play_count')
# track is the track number; title is a string; length is the number of
# seconds long the song is; play_count is the number of times the user
# has listened to the song
def Song_str(S: Song)->str:
'''Takes a song and returns a string containing that songs
information in an easily readible format'''
return '{:12}{}\n{:12}{}\n{:12}{}\n{:12}{}'.format('Track:', S.track,
'Title:', S.title,
'Length:', S.length,
'Play Count:', S.play_count)
def Album_str(a: Album)->str:
'''Takes an album and returns a string containing that songs
information in an easily readible format'''
Album_Songs = a.songs
for i in range(0, len(Album_Songs)):
String = Song_str(Album_Songs[i])+ '\n'
return '{:10}{}\n{:10}{}\n{:10}{}\n{:10}{}\n\n{}\n{}'.format('ID:', a.id,
'Artist:', a.artist,
'Title:', a.title,
'Year:', a.year,
'List of Songs:', String)
print(Album_str(AN ALBUM))
专辑信息打印正常但是当打印专辑的歌曲时,它会打印出该列表中的第一首或最后一首歌曲信息
答案 0 :(得分:0)
好吧,忽略你的方法定义不正确的事实python,你的确切错误就在这里:
String = Song_str(Album_Songs[i])+ '\n'
相册的每次迭代,您都在重新建立名为String
的变量。这是你真正想要的:
def Album_str(a):
'''Takes an album and returns a string containing that songs
information in an easily readible format'''
Album_Songs = a.songs
list_of_songs = []
for album_song in Album_Songs: # Don't use list indexing, just iterate over it.
list_of_songs.append(Song_str(album_song))
return '{:10}{}\n{:10}{}\n{:10}{}\n{:10}{}\n\n{}\n{}'.format('ID:', a.id,
'Artist:', a.artist,
'Title:', a.title,
'Year:', a.year,
'List of Songs:', '\n'.join(list_of_songs))
另外,请勿使用变量名String
。