infor = {}
information = {}
def make_album():
infor = {}
information = {}
active=True
while active:
print("请在输入完毕后输入end退出")
singer_name=input("请输入歌手名")
if singer_name == "end":
break
ablum_name=input("请输入专辑名")
if ablum_name=="end":
break
number=input("请输入歌数量,如未知请输入0")
if number=="end":
break
else:
number=int(number)
if number ==0:
information[singer_name] = ablum_name
else:
infor[ablum_name]=number
return infor
return information
infor = infor
information = information
def check_list():
for singer_name,ablum_name in information.items():
if infor.values() != 0:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,该专辑收录了{number}首歌曲")
else:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,暂未知晓收录歌曲数")
while True:
a=input("请输入添加或查询以开始")
if a =="添加":
make_album()
elif a=="查询":
check_list()
数据结构有问题,information直接存字典,字典包含专辑名称和歌曲数量好了。make_album如果歌曲数量为0并没有往information字典中添加歌手,而check_list只遍历information,会无法输出没有歌曲的专辑。
如果一个歌手多个专辑,information的键值应该用集合,下面按照题主的代码直接一个歌手对应一个专辑
information = {}
def make_album():
active=True
while active:
print("请在输入完毕后输入end退出")
singer_name=input("请输入歌手名")
if singer_name == "end":
break
ablum_name=input("请输入专辑名")
if ablum_name=="end":
break
number=input("请输入歌数量,如未知请输入0")
if number=="end":
break
else:
number=int(number)
information[singer_name] = {"ablum_name":ablum_name,"number":number}##存字典
def check_list():
for singer_name,value in information.items():
if value['number'] != 0:####################
print(f"专辑:{value['ablum_name']}由歌手{singer_name}创作,该专辑收录了{value['number'] }首歌曲")
else:
print(f"专辑:{value['ablum_name']}由歌手{singer_name}创作,暂未知晓收录歌曲数")
while True:
a=input("请输入添加或查询以开始")
if a =="添加":
make_album()
elif a=="查询":
check_list()
【以下回答由 GPT 生成】
解决方案:
下面是对代码中存在的问题进行分析和修改建议:
make_album()
函数中,不需要重新定义infor
和information
的空字典。因为全局变量infor
和information
已经定义好了,不需要再次定义。def make_album():
active = True
while active:
print("请在输入完毕后输入end退出")
singer_name = input("请输入歌手名")
if singer_name == "end":
break
ablum_name = input("请输入专辑名")
if ablum_name == "end":
break
number = input("请输入歌数量, 如未知请输入0")
if number == "end":
break
else:
number = int(number)
if number == 0:
information[singer_name] = ablum_name
else:
infor[ablum_name] = number
make_album()
函数中,需要将收集到的歌手和专辑信息返回。因为后续在查询中需要使用这些信息。def make_album():
active = True
while active:
print("请在输入完毕后输入end退出")
singer_name = input("请输入歌手名")
if singer_name == "end":
break
ablum_name = input("请输入专辑名")
if ablum_name == "end":
break
number = input("请输入歌数量, 如未知请输入0")
if number == "end":
break
else:
number = int(number)
if number == 0:
information[singer_name] = ablum_name
else:
infor[ablum_name] = number
return infor, information
number
。需要将infor[singer_name]
改为infor[ablum_name]
。def check_list():
for singer_name, ablum_name in information.items():
if infor[ablum_name] != 0:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,该专辑收录了{infor[ablum_name]}首歌曲")
else:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,暂未知晓收录歌曲数")
make_album()
返回的信息需要赋值给变量。所以需要将make_album()
修改为infor, information = make_album()
。while True:
a = input("请输入添加或查询以开始")
if a == "添加":
infor, information = make_album()
elif a == "查询":
check_list()
修改后的代码:
infor = {}
information = {}
def make_album():
active = True
while active:
print("请在输入完毕后输入end退出")
singer_name = input("请输入歌手名")
if singer_name == "end":
break
ablum_name = input("请输入专辑名")
if ablum_name == "end":
break
number = input("请输入歌数量, 如未知请输入0")
if number == "end":
break
else:
number = int(number)
if number == 0:
information[singer_name] = ablum_name
else:
infor[ablum_name] = number
return infor, information
def check_list():
for singer_name, ablum_name in information.items():
if infor[ablum_name] != 0:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,该专辑收录了{infor[ablum_name]}首歌曲")
else:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,暂未知晓收录歌曲数")
while True:
a = input("请输入添加或查询以开始")
if a == "添加":
infor, information = make_album()
elif a == "查询":
check_list()
【相关推荐】
引用 皆我百晓生 小程序回复内容作答:
该段代码中有以下问题:
make_album()
函数是用来获取用户输入并返回结果的,但是在调用函数时没有将返回的结果赋给任何变量。可以修改为 album = make_album()
来保存结果。
infor
和 information
是全局变量,在函数中并没有使用到,可以删除掉。
在 check_list()
函数中,使用 infor.values() != 0
来判断是否有歌曲数量,这是错误的判断方式。应该判断 number
是否等于 0,可以修改为 number != 0
。
在 check_list()
函数中,打印语句中使用了未定义的变量 number
,应该使用 infor[ablum_name]
替代。
下面是修改后的代码:
def make_album():
infor = {}
information = {}
active = True
while active:
print("请在输入完毕后输入end退出")
singer_name = input("请输入歌手名")
if singer_name == "end":
break
ablum_name = input("请输入专辑名")
if ablum_name == "end":
break
number = input("请输入歌数量,如未知请输入0")
if number == "end":
break
else:
number = int(number)
if number == 0:
information[singer_name] = ablum_name
else:
infor[ablum_name] = number
return infor, information
def check_list():
infor, information = make_album()
for singer_name, ablum_name in information.items():
if infor[ablum_name] != 0:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,该专辑收录了{infor[ablum_name]}首歌曲")
else:
print(f"专辑:{ablum_name}由歌手{singer_name}创作,暂未知晓收录歌曲数")
while True:
a = input("请输入添加或查询以开始")
if a == "添加":
album = make_album()
elif a == "查询":
check_list()