Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Debugging a simple Python price code

I have this code in Python

def receipt(array):
  sum = 0.0
  for i in range(len(array)):
    sum = sum + array[i]
  return sum

array = []

while True:
  print("Calculating Price")
  n = input("Enter a price: ")
  if n == "":
    print("Goodbye")
    break
  array.append(n)
  totalCost = receipt(n)
  print("The total cost is " + str(totalCost))

And I'm wondering why this code won't work. There seems to be some error in the fourth line

sum = sum + array[i]

But I can't figure out which part of it is wrong. I believe I used the array[i] component correctly. Perhaps it's a string issue?

Question:

  1. Which part of the code doesn't work?
  2. What is my error?

I'm relatively new to computer science in general. Thanks for the help. Anything is appreciated!

like image 329
Crescendo Avatar asked Jan 21 '26 12:01

Crescendo


1 Answers

I ran your code and got this error:

$ python test.py
Calculating Price
Enter a price: 24
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    totalCost = receipt(n)
  File "test.py", line 4, in receipt
    sum = sum + array[i]
TypeError: unsupported operand type(s) for +: 'float' and 'str'

This means that in your sum = sum + array[i] line, the types don't match up. You need to wrap array[i] in a float() function to match array[i] to the type of sum, which is a float since you initialized it to 0.0. The docs say the input() function returns a string, and since you're appending n to array, you are trying to sum a string with a float. The line should look like this:

  sum = sum + float(array[i])

Try running it again and the code works. Here is the documentation for input()

Edit: now to fix the issues were were having with the sum.

Here is a version of your code I have revised with corrections to do the addition the way you want.

  1 def receipt(sumvar, n):
  2   sumvar = sumvar + float(n)
  3   return sumvar
  4
  5 array = []
  6 sumvar = 0.0
  7
  8 while True:
  9   print("Calculating Price")
 10   n = input("Enter a price: ")
 11   if n == "":
 12     print("Goodbye")
 13     break
 14   totalCost = receipt(sumvar, n)
 15   sumvar = totalCost
 16   print("The total cost is " + str(totalCost))

As mentioned by others, sum isn't a great variable name so I've renamed it sumvar. Notice the sumvar declaration that is outside the function. When you initialize sumvar inside receipt() like you did, you will always be adding n to 0.0. I doubt this is what you want. Instead, you want to keep a running total of the item count, which needs to be passed into the function. I've also eliminated the loop from your function. This loop was actually iterating over the characters in array, not the elements as you expected it to.

like image 98
McGlothlin Avatar answered Jan 24 '26 00:01

McGlothlin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!