做这个练习时发现代码存在问题,例如第一轮的AN和SN分别输入a和b,进入第二轮循环时AN输入'q',输出结果却变成了{‘An’: q, 'Sn': b},而不是{‘An’: a, 'Sn': b}
def make_album(AN, SN, SNU = None):
"""描述一个专辑的相关信息"""
MA = {'An': AN, 'Sn': SN}
if SNU:
MA['SNU'] = SNU
return print(MA)
while True:
print("\nEnter 'q' at any time to quit")
AN = input("Please enter album's name:")
if AN == 'q':
break
SN = input("Please enter singer's name:")
if SN == 'q':
break
make_album(AN, SN)
因为前一轮AN的值没存入字典,然后AN又被第二轮的'q'覆盖了,所以打印出的结果就变了;
可以把make_album(AN, SN) 这一行,放到while循环里。
修改如下:
def make_album(AN, SN, SNU = None):
"""描述一个专辑的相关信息"""
MA = {'An': AN, 'Sn': SN}
if SNU:
MA['SNU'] = SNU
return print(MA)
while True:
print("\nEnter 'q' at any time to quit")
AN = input("Please enter album's name:")
if AN == 'q':
break
SN = input("Please enter singer's name:")
if SN == 'q':
break
make_album(AN, SN)
【以下回答由 GPT 生成】
以下是改进的代码:
def make_album(AN, SN, SNU = None):
"""描述一个专辑的相关信息"""
MA = {'An': AN, 'Sn': SN}
if SNU:
MA['SNU'] = SNU
return MA
while True:
print("\nEnter 'q' at any time to quit")
AN = input("Please enter album's name:")
if AN == 'q':
break
SN = input("Please enter singer's name:")
if SN == 'q':
break
MA = make_album(AN, SN)
print(MA)
问题的原因是代码中错误地使用了return print(MA)
,这导致make_album
函数返回None
而不是字典。改进的方法是将return
语句分开,先返回字典,然后在循环外部打印字典。
代码中还可以改进的地方包括函数名和变量名的命名规范,可以更具体地描述其含义。另外,可以考虑在用户输入时添加异常处理,以防止程序崩溃。以下是进一步改进的代码示例:
def create_album_info(album_name, singer_name, singer_nationality=None):
"""描述一个专辑的相关信息"""
album_info = {'Album Name': album_name, 'Singer Name': singer_name}
if singer_nationality:
album_info['Singer Nationality'] = singer_nationality
return album_info
while True:
print("\nEnter 'q' at any time to quit")
try:
album_name = input("Please enter album's name:")
if album_name == 'q':
break
singer_name = input("Please enter singer's name:")
if singer_name == 'q':
break
album_info = create_album_info(album_name, singer_name)
print(album_info)
except Exception as e:
print("An error occurred:", e)
请注意,上述改进的代码是根据代码片段提供的信息进行的假设和修改。