[英]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
循环中的所有信息(例如itemid
、 qtysold
)保存到list1
中。 Otherwise, qtysold
and totalprices
will always keep the last value when exiting the while
loop.否则,退出while
循环时, qtysold
和totalprices
将始终保留最后一个值。 This explains the reason for the problem you are facing.这解释了您所面临问题的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.