无法遍历Song元组列表

时间:2013-11-21 03:49:50

标签: python for-loop tuples

使用的元组如下:

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))

专辑信息打印正常但是当打印专辑的歌曲时,它会打印出该列表中的第一首或最后一首歌曲信息

1 个答案:

答案 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