我已经编写了一个代码来使用一个函数和一个while循环来使用用户输入来填充字典。不幸的是,我的代码似乎只接受用户输入的最后一个key:value对。我希望的是在运行代码时出现多个key:value对。
我是Python的新手,不胜感激我将不胜感激。谢谢。
ps:请参见下面的代码
def make_album(artist_name,album_title):
"""Return a dictionary of information about album."""
album_details_1 = {'name': artist_name, 'title': album_title}
return album_details_1
while True:
print("\nPlease tell me the name of your favourite artist:")
art_name =input("artist name: ")
alb_title=input("album title: ")
repeat = input("Would you like to enter another response? (yes/no) ")
if repeat == 'no':
break
musician_1 = make_album(art_name, alb_title)
print(musician_1)
答案 0 :(得分:0)
之所以只获得一个key:value对,是因为每次运行循环时,您都将覆盖变量。您可以使用一个简单的列表来累积所有音乐家并在最后打印出来:
def make_album(artist_name,album_title):
"""Return a dictionary of information about album."""
album_details_1 = {'name': artist_name, 'title': album_title}
return album_details_1
musicians = [] # list of musicians
while True:
print("\nPlease tell me the name of your favorite artist:")
art_name =input("artist name: ")
alb_title=input("album title: ")
musicians.append(make_album(art_name, alb_title)) # add the new musicians to list
repeat = input("Would you like to enter another response? (yes/no) ")
if repeat.lower() == 'no':
break
print(musicians)
输出:
Please tell me the name of your favorite artist:
artist name: 1
album title: 1
Would you like to enter another response? (yes/no) yes
Please tell me the name of your favorite artist:
artist name: 2
album title: 2
Would you like to enter another response? (yes/no) no
[{'name': '1', 'title': '1'}, {'name': '2', 'title': '2'}]
请注意,我使用repeat.lower()
来检查输入,这样您的程序将独立于字符串大小写(NO / No / nO / no)而停止。
答案 1 :(得分:0)
问题在于,while循环要求用户在每次迭代时输入艺术家和专辑名称,但对这些信息没有任何作用。它只是一遍又一遍地问用户,直到他们拒绝为止。只有这样,才能从最后一个艺术家专辑对创建字典。
当您说要多个键值对时,您已经这样做了。 如果运行该程序并输入艺术家名称“ freddy”和专辑“ my_album”,我将得到:
Please tell me the name of your favourite artist:
artist name: freddy
album title: my_album
Would you like to enter another response? (yes/no) no
{'title': 'my_album', 'name': 'freddy'}
请注意,我有一个值为“ my_album”的键“ title”和一个值为“ freddy”的键“ name”。因此,有2个键值对。
当您说想要多个键值对时,我假设您的意思是要跟踪多个艺术家,专辑名称对。如果是这样,在Python中执行此操作的最佳方法是使用元组。您可以将('freddy','my_album')
作为元组。使用元组,您不需要任何键。相反,每个项目的位置都告诉您它的含义。在这种情况下,元组的第一项是艺术家名称,第二项是唱片集名称。
然后,使用元组,可以列出其中的一个列表,以跟踪所有艺术家和专辑对:
def make_album(artist_name,album_title):
"""Return a tuple of information about album."""
return (artist_name, album_title)
all_tuples = []
while True:
print("\nPlease tell me the name of your favourite artist:")
art_name =input("artist name: ")
alb_title=input("album title: ")
musician = make_album(art_name, alb_title)
all_tuples.append(musician)
repeat = input("Would you like to enter another response? (yes/no) ")
if repeat == 'no':
break
print(all_tuples)
您甚至不需要创建元组的功能:musician = (art_name, alb_title)
或者更好的是all_tuples.append((art_name,alb_title))