You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.11中preco变量未识别且收据信息不显示问题求助

问题根源

  1. 错误使用print()赋值:tipo_carne = print(int(input(...)))这类代码会把print()的返回值(None)赋给变量,导致后续所有依赖这些变量的判断逻辑完全失效,preco变量根本不会被初始化,从而引发未定义错误。
  2. 未处理无效输入:如果用户输入的肉类选项不是1/2/3,preco变量不会被赋值,后续引用时必然报错。
  3. 全局变量滥用:没必要使用全局变量,局部变量足以完成逻辑,全局变量反而增加代码复杂度。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:27:32