如何通过允许用户将现金金额插入列表中,并且列表在字符串中,使收银机总计



我想通过允许用户将现金金额插入列表来使收银机总计。但它给了我一个错误:

Purchase :12
Purchase :23
Purchase :12
Purchase :29.2
Purchase :11
Purchase :q
['12', '23', '12', '29.2', '11']
11.0
['12', '23', '12']
12.0
['12']
12.0
Traceback (most recent call last):
File "C:UsersWan AfifiDesktopPythonappend.py", line 17, in <module>
add = float(purchase_amount.pop())
IndexError: pop from empty list

我在这里附上我的代码。我想知道我的代码出了什么问题?但在这里我必须做.pop()才能完成任务。

purchase_amount = []
x = 0
while True:
purchase_amount1 = input("Purchase :")
if purchase_amount1.upper() != "Q":
purchase_amount.insert(x, purchase_amount1)
x = x + 1
else:
break
print(purchase_amount)
subtotal = 0
while len(purchase_amount) != 0:
print(float(purchase_amount.pop()))
add = float(purchase_amount.pop())
print(purchase_amount)
subtotal = add + add
print(subtotal)

每次循环迭代都会从列表中弹出一个元素两次:

while len(purchase_amount) != 0:
print(float(purchase_amount.pop()))
add = float(purchase_amount.pop())

除非列表中有偶数个元素,否则会导致问题,因为您没有第二个元素在末尾弹出。

您只需要弹出一次,并打印您分配给add:的值

while len(purchase_amount) != 0:
add = float(purchase_amount.pop())
print(add)
# ...

!= 0测试是可选的,因为在布尔上下文(如while条件(中,非零整数值被视为"true"。len()调用也可以被删除,因为非空列表也被认为是真的:

while purchase_amount:
add = float(purchase_amount.pop())
print(add)
# ...

接下来,您要将该值添加到收集的总数中。您当前正在用添加到自身的add替换每次迭代的subtotal变量:

while purchase_amount:
add = float(purchase_amount.pop())
subtotal = subtotal + add

接下来,您根本不需要使用list.pop()。只需直接循环列表:

for add in purchase_amount:
add = float(add)
subtotal = subtotal + add

您可以使用+=增强分配缩短最后一行:

for add in purchase_amount:
add = float(add)
subtotal += add

您可以使用map()函数进一步缩短它,以便在循环时将所有元素转换为浮点,使用sum()函数将序列中的所有值相加:

subtotal = sum(map(float, purchase_amount))

最新更新