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

Python打印账单重复输出最后一条输入数据的问题解决方法

问题成因

打印商品明细的循环存在索引引用错误:
录入商品的外层循环使用变量item作为计数器,当该循环执行完毕后,item会固定为range(N)的最后一个值(即N-1)。后续打印明细的循环虽然使用i作为遍历变量逐次递增,但读取字典数据时始终写的是compra[item+1],等价于每次循环都固定读取最后一个录入的商品条目,因此会重复N次输出最后一条商品数据。
另外原代码还存在一个隐性精度问题:计算单商品总价时使用int()对IVA计算结果做强制类型转换,会直接截断小数部分,导致金额统计出现误差。

修复方案
  • 将打印循环中所有读取字典的compra[item+1]替换为compra[i+1],保证每次循环读取当前遍历序号对应的商品数据
  • 将单商品总价计算处的int()强转替换为float(),保留小数精度,避免金额计算错误
  • 补全Python要求的层级缩进(循环、判断分支下的代码必须统一缩进4个空格,否则会直接触发语法错误)
  • 可选优化:最终金额输出时使用round(数值, 2)保留两位小数,符合日常金额显示习惯
修复后完整代码
N = int(input("Digite la cantidad de Artículos a facturar: "))
dataProd = ('Código', 'Nombre', 'Cantidad', 'Valor unitario', 'Tipo de IVA')
compra = {}
acuSubTotal = 0
acuIvatotal = 0
acuTotalprod = 0

for item in range(N):
    listdataProd = []
    for dato in dataProd:
        listdataProd.append(input(f"Digite el {dato} del producto {item + 1}: "))
    
    compra[item+1] = listdataProd
    # 计算单商品小计
    compra[item+1].append(int(compra[item+1][2]) * int(compra[item+1][3]))

    iva = (0, 0.05, 0.19)
    # 计算单商品IVA
    if int(compra[item+1][4]) == 1:
        compra[item+1].append(float(compra[item+1][5]) * iva[0])
    elif int(compra[item+1][4]) == 2:
        compra[item+1].append(float(compra[item+1][5]) * iva[1])
    else:
        compra[item+1].append(float(compra[item+1][5]) * iva[2])

    # 计算单商品总价,替换原int强转为float避免精度丢失
    compra[item+1].append(float(compra[item+1][5]) + float(compra[item+1][6]))  

    acuSubTotal += compra[item+1][5]
    acuIvatotal += compra[item+1][6]
    acuTotalprod += compra[item+1][7]

print("\n****************")
print("Detalles de la compra: ")
print("****************")

# 修正索引引用,遍历读取对应序号的商品数据
for i in range(N):
    print(f"\nCodigo del Producto {i + 1}: ", compra[i+1][0])
    print(f"Nombre del Producto {i + 1}: ", compra[i+1][1])
    print(f"Cantidad del Producto {i + 1}: ", compra[i+1][2])
    print(f"Valor Unitario del Producto {i + 1}: ", compra[i+1][3])
    print(f"Tipo de Iva del Producto {i + 1}: ", compra[i+1][4])
    print(f"Subtotal del Producto {i + 1}: ", compra[i+1][5])
    print(f"Iva del Producto {i + 1}: ", compra[i+1][6])
    print(f"Valor Total del Producto {i + 1}: ", compra[i+1][7])

print("\n****************")
print("Totales de la compra: ")
print("****************")
print("SubTotal de la compra: ", acuSubTotal)
print("IVA Total de la compra: ", round(acuIvatotal, 2))
print("Total de la compra: ", round(acuTotalprod, 2))

内容的提问来源于stack exchange,提问作者Jaider Durán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:18:19