Python 3.11中preco变量未识别且收据信息不显示问题求助
问题根源
- 错误使用
print()赋值:tipo_carne = print(int(input(...)))这类代码会把print()的返回值(None)赋给变量,导致后续所有依赖这些变量的判断逻辑完全失效,preco变量根本不会被初始化,从而引发未定义错误。 - 未处理无效输入:如果用户输入的肉类选项不是1/2/3,
preco变量不会被赋值,后续引用时必然报错。 - 全局变量滥用:没必要使用全局变量,局部变量足以完成逻辑,全局变量反而增加代码复杂度。
修正后的代码
def desafio_2(): print(''' 1 FILE DUPLO R$4,9 por KG (até 5KG)|| R$5,80 (ACIMA DE 5KG) 2 alcatra R$5,9 por KG (até 5KG)|| R$6,80 (ACIMA DE 5KG) 3 picanha R$6,9 por KG (até 5KG)|| R$7,80 (ACIMA DE 5KG) ''') # 修复:去掉print,正确获取输入值 tipo_carne = int(input("Insira sua opcao: [1] [2] [3] ")) nome = "" if tipo_carne == 1: nome = "file duplo" elif tipo_carne == 2: nome = "alcatra" elif tipo_carne == 3: nome = "picanha" else: print("Opção de carne inválida!") return # 无效输入直接终止函数 # 修复:去掉print,获取克数后转换为千克 qtd_gramas = float(input("Insira sua quantidade de carne em gramas:\n")) qtd_carne = qtd_gramas / 1000 # 转换为千克单位 preco = 0.0 if tipo_carne == 1: preco = qtd_carne * 4.90 if qtd_carne <=5 else qtd_carne * 5.80 elif tipo_carne == 2: preco = qtd_carne * 5.90 if qtd_carne <=5 else qtd_carne * 6.80 elif tipo_carne == 3: preco = qtd_carne * 6.90 if qtd_carne <=5 else qtd_carne * 7.80 # 修复:去掉print,正确获取支付方式 tipo_pagamento = int(input("Cartão débito [1] - (desconto 5%), Dinheiro Físico[2] \n")) if tipo_pagamento == 1: preco *= 0.95 # 打印收据 print("\n=== Relatório de Compra ===") print(f"TIPO DE CARNE: {nome}") print(f"QUANTIDADE EM KG: {qtd_carne:.2f}") print(f"TIPO DE PAGAMENTO: {'Cartão Débito' if tipo_pagamento ==1 else 'Dinheiro Físico'}") print(f"PREÇO FINAL: R${preco:.2f}") # 调用函数执行程序 desafio_2()
关键修复说明
- 移除
print()赋值:所有变量赋值时直接获取input()的转换值,不再嵌套print(),保证变量能拿到正确的用户输入。 - 输入有效性校验:增加肉类选项的无效输入处理,避免
preco未初始化的情况。 - 单位转换优化:明确将输入的克数转换为千克,逻辑更清晰,避免原代码中单位混淆的问题。
- 替换全局变量:改用局部变量,代码更简洁易维护。
- 优化收据格式:使用f-string让输出更清晰美观,同时显示肉类名称而非数字,提升可读性。
内容的提问来源于stack exchange,提问作者Levi
相关产品推荐
相关产品推荐

