初学者提问,这段代码哪里有问题且如何进行修改


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 生成】

解决方案:

下面是对代码中存在的问题进行分析和修改建议:

  1. make_album()函数中,不需要重新定义inforinformation的空字典。因为全局变量inforinformation已经定义好了,不需要再次定义。
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
  1. 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
  1. 在以下代码中,在打印信息的语句中,没有定义变量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}创作,暂未知晓收录歌曲数")
  1. 在以下代码中,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()


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

引用 皆我百晓生 小程序回复内容作答:
该段代码中有以下问题:

  1. make_album() 函数是用来获取用户输入并返回结果的,但是在调用函数时没有将返回的结果赋给任何变量。可以修改为 album = make_album() 来保存结果。

  2. inforinformation 是全局变量,在函数中并没有使用到,可以删除掉。

  3. check_list() 函数中,使用 infor.values() != 0 来判断是否有歌曲数量,这是错误的判断方式。应该判断 number 是否等于 0,可以修改为 number != 0

  4. 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()