Cómo sumr una lista de números almacenados como cadenas

Este es mi progtwig. El usuario debe ingresar todos los precios de sus artículos y cuando terminen, ingresan: total. Entonces se supone que esto sum todos los precios que ingresan y les devuelve un total. Cada vez que ejecuto el progtwig, dice:

Traceback (most recent call last): File "C:\Users\dimei_000\Desktop\Python Benchmark Part II.py", line 24, in  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' 

Entiendo que no puedo forzar que la lista sea un número, pero no puedo pensar en una solución.

Este es mi progtwig:

 #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() 

Como dice el rastreo, el error está aquí:

 totalPrice=sum(int(priceItems[0:])) 

Esta única línea realmente contiene algunos errores:

  1. priceItems[0:] es una porción desde el principio hasta el final de priceItems ; en otras palabras, [0:] no hace nada. Eso no es un error exactamente, pero no tiene sentido, y sugiere que realmente no sabes lo que intentas lograr con él.

  2. int(priceItems[0:]) está intentando convertir la lista en un entero, lo que obviamente no funcionará.

  3. Si de alguna manera hubiera podido convertir la lista en un entero, sum(int(priceItems[0:])) intentaría obtener la sum de ese entero, lo que tampoco tiene sentido; sums una colección de números, ni uno solo.

En su lugar, use el map funciones:

 totalPrice = sum(map(int, priceItems)) 

Eso tomará cada elemento de la lista, lo convertirá en un número entero y sumrá los resultados.

Tenga en cuenta, sin embargo, que toda la cosa podría escribirse como:

 print('Your total is:', sum(map(int, iter(lambda: input('Please enter the prices of your items, once you are done type: total.'), 'total')))) 

Si prefieres un estilo menos funcional, puedes usar una expresión generadora.

 totalPrice = sum(int(x) for x in priceItems)) 

Mejor aún, convierta los elementos a int como parte de su validación de entrada para que esté creando una lista de int