这是我的计划。用户必须输入其物品的所有价格,并在完成后输入:总计。然后,这应该将他们输入的所有价格加起来并将它们归还总额。每次我运行程序时,都会说:
Traceback (most recent call last):
File "C:\Users\dimei_000\Desktop\Python Benchmark Part II.py", line 24, in <module>
main()
File "C:\Users\dimei_000\Desktop\Python Benchmark Part II.py", line 6, in main
regReport(regCalc(regInput()))
File "C:\Users\dimei_000\Desktop\Python Benchmark Part II.py", line 15, in regCalc
totalPrice=sum(int(priceItems[0:]))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
我坚持认为我不能强迫列表成为一个数字,但我无法想到修复。
这是我的计划:
#Python Register Thingy
priceItems=[0]
total='total'
def main():
regReport(regCalc(regInput()))
def regInput():
user=input("Please enter the prices of your items, once you are done type: total.\n")
if(user==total):
pass
else:
priceItems.append(int(user))
regInput()
def regCalc(items):
totalPrice=sum(int(priceItems[0:]))
def regReport(total):
print("""
====================================
Kettle Moraine Ka$h Register
Thanks for Shopping!
====================================
Your total:""")
return totalPrice
main()
答案 0 :(得分:4)
正如追溯所说,错误在于:
totalPrice=sum(int(priceItems[0:]))
这一行实际上包含一些错误:
priceItems[0:]
是从priceItems
开始到结尾的切片 - 换句话说,[0:]
无效。这不是一个错误,但它 毫无意义,并暗示你并不真正知道你用它来实现的目标。
int(priceItems[0:])
正在尝试将列表转换为整数,这显然不会起作用。
如果您已经能够以某种方式将列表转换为整数,那么sum(int(priceItems[0:]))
将尝试获得该整数的总和,这也没有意义;你总结了一组数字,而不是一个数字。
相反,请使用函数map
:
totalPrice = sum(map(int, priceItems))
将列出每个项目,将其转换为整数并对结果求和。
但请注意,整个事情可以写成:
print('Your total is:', sum(map(int, iter(lambda: input('Please enter the prices of your items, once you are done type: total.'), 'total'))))
答案 1 :(得分:1)
如果您喜欢功能较少的样式,可以使用生成器表达式
totalPrice = sum(int(x) for x in priceItems))
最好将项目转换为int
作为输入验证的一部分,以便创建int