简体   繁体   English

python 中的发票(收据)程序。 如何防止覆盖旧值

[英]invoice (receipt) program in python. How to prevent overwriting old values

I'm a new learner for python and I'm trying to make a program that prints in invoice of all the items + their price + their quantity.我是 python 的新学习者,我正在尝试制作一个程序,在发票中打印所有物品 + 价格 + 数量。 each item is in separate line.每个项目都在单独的行中。

I have got tot he point where I print each item in a line, but I keep overwriting the old values by the last value entered.我已经知道我在一行中打印每个项目,但我一直用最后输入的值覆盖旧值。 how can I prevent this?我怎样才能防止这种情况? this is the code:这是代码:

    print("This program prints your invoices."
      "\nPlease enter the item identification, item cost and quantity sold when promted."
      "\nEnter 'done' when no more items"
      "\n=========================================")
saveqty= ()
savetprice=()
qtysum= 0 #quantity =qty for short
sumprice=0
list1 = []
totalprice=0
while True:
    itemid = input('Item identification: ')
    if itemid == "done":
        break


    if len(itemid)<3:
        print("item identification should be at least 3 characters long, try again")
        continue
    else:
        list11 = list[itemid]
        list1 +=[itemid]

    qtysold = input("Qty sold: ")
    try:
        qtysold =int(qtysold)
    except ValueError:
        print("must be an integer value, try again")
        continue
    qtysum+=qtysold


    try:
        itemprice = float(input("Item price: "))
        savetprice= (itemprice)
    except ValueError:
        print("item price must be numerical value, try again")
        continue

    totalprices= (qtysold*itemprice)
    totalprice+=totalprices



for elem in list1:
    print(qtysold,'x ',elem, '@ ', savetprice, 'SAR', '===', totalprices)

total = sumprice
itemtotal = qtysum
print("=========================================\nNo. of items purchased: ", itemtotal,"\nTotal price is: ", totalprice, "SAR")

Below is the code that fixes your problem以下是解决您的问题的代码

print("This program prints your invoices."
      "\nPlease enter the item identification, item cost and quantity sold when promted."
      "\nEnter 'done' when no more items"
      "\n=========================================")
saveqty = ()
savetprice = ()
qtysum = 0  # quantity =qty for short
sumprice = 0
list1 = []
totalprice = 0

while True:
    itemid = input('Item identification: ')
    if itemid == "done":
        break

    if len(itemid) < 3:
        print("item identification should be at least 3 characters long, try again")
        continue

    qtysold = input("Qty sold: ")
    try:
        qtysold = int(qtysold)
    except ValueError:
        print("must be an integer value, try again")
        continue
    qtysum += qtysold

    try:
        itemprice = float(input("Item price: "))
        savetprice = (itemprice)
    except ValueError:
        print("item price must be numerical value, try again")
        continue

    totalprices = (qtysold * itemprice)
    totalprice += totalprices

    list1.append((itemid, qtysold, savetprice, totalprices))

for elem, qtysold, savetprice, totalprices in list1:
    print(qtysold, 'x ', elem, '@ ', savetprice, 'SAR', '===', totalprices)

total = sumprice
itemtotal = qtysum

print("=========================================\nNo. of items purchased: ", itemtotal, "\nTotal price is: ", totalprice, "SAR")

Output: Output:

This program prints your invoices.
Please enter the item identification, item cost and quantity sold when promted.
Enter 'done' when no more items
=========================================
Item identification: 123
Qty sold: 5
Item price: 20
Item identification: 456
Qty sold: 3
Item price: 30
Item identification: done
5 x  123 @  20.0 SAR === 100.0
3 x  456 @  30.0 SAR === 90.0
=========================================
No. of items purchased:  8 
Total price is:  190.0 SAR

Note: You need to save all the information (eg, itemid , qtysold ) in the while loop to list1 if you want to print them out later.注意:如果您想稍后打印出来,您需要将while循环中的所有信息(例如itemidqtysold )保存到list1中。 Otherwise, qtysold and totalprices will always keep the last value when exiting the while loop.否则,退出while循环时, qtysoldtotalprices将始终保留最后一个值。 This explains the reason for the problem you are facing.这解释了您所面临问题的原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM