调试一个简单的Python price-cod

2024-10-17 02:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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))

我想知道为什么这个代码不起作用。第四行似乎有点错误

^{pr2}$

但我不知道哪一部分是错的。我相信我正确地使用了数组[I]组件。也许这是一个字符串的问题?在

Question:

  1. 代码的哪一部分不起作用?在
  2. 我的错误是什么?在

一般来说,我对计算机科学比较陌生。谢谢你的帮助。什么都值得感激!在


Tags: 代码intrueforlenreturndef错误
3条回答

我运行了你的代码,得到了这个错误:

$ 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'

这意味着在sum = sum + array[i]行中,类型不匹配。您需要将array[i]包装在float()函数中,以便将array[i]与{}的类型匹配,这是一个浮点,因为您将它初始化为0.0。文档说input()函数返回一个字符串,由于您要将n附加到array,所以您正试图用一个浮点对字符串求和。线条应该是这样的:

^{pr2}$

再次尝试运行它,代码就可以工作了。Here是{}的文档

编辑:现在要解决的问题是与总和。在

这是你的代码的一个版本,我已经修正了,以你想要的方式进行添加。在

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

正如其他人提到的,sum不是一个好的变量名,所以我将它重命名为sumvar。请注意函数外部的sumvar声明。当您像您一样初始化sumvar内部的receipt()时,您将始终向n添加{}。我怀疑这是你想要的。相反,您希望保持项目计数的运行总数,这需要传递到函数中。我还消除了你函数中的循环。这个循环实际上是迭代array中的字符,而不是您期望的元素。在

你有什么问题,我会一一点评:

首先,你有一些压痕问题,小心点。 其余的是代码中的注释

update

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 you convert the str into float here it will cause an error in the if
  if n == "": #here, when you hit enter, it sends the "" (empty string)
    print("Goodbye")
    break
  array.append(float(n)) #So an option is transform the string here
  totalCost = receipt(array) #and here, you gave to receipt() function the wrong param, you gave "n" and it was waiting for an array 
  print("The total cost is " + str(totalCost))

首先有几件事不对。我会解释每件事。 以下是您的完整工作代码:

def receipt(array):
  total = 0.0
  for i in array:
    total = total + i
  return total

array = []

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

你的错误:

1)array.append(n)-第一个。对于初学者来说很常见。在

python中的input()以字符串形式获取用户输入。所以你的n是一个字符串。在

请看所有语言中都有data types。Python是一种强类型语言,而perl不是强类型语言。如何判断语言是强类型还是弱类型?简单。在你的翻译里试试这个。在

^{pr2}$

看到错误了现在试试这个

>>> a=5
>>> b='9'
>>> a+int(b)
14

工作得很好。Python不允许只使用a+b,而有些语言则支持exampleperl。多读一读。所以你不能添加它们你必须类型转换。所以把它换成

array.append(int(n)) 

或者

array.append(float(n))

如果要使用浮点值。在

2)totalCost = receipt(n)请看您正在将n传递给函数。但是你的函数定义有def receipt(array):。这里实际发生的是

receipt(n) ----> (calls) ---->def receipt(array):

其中n ------> array所以你的array就是n。你应该做的是

totalCost = receipt(array)

3)sum = 0.0NEVER我说过不要使用内置或关键字名称(例如:sum、min、max、int、str等)作为变量名。阅读有关在PEP 8中命名的详细信息

所以也许可以将sum重命名为sum_(这是要遵循的惯例),但是为什么不能将sum重命名为total简单得多?在

4)和最后

for i in range(len(array)):
    sum = sum + array[i]

为什么range(len(array))当你可以简单地做for i in array:

无法理解请看这个例子:

>>> a = [1,2,3]
>>> for i in a:
    print(i)


1
2
3

See for item in something只需要从一组东西(iterable(list、tuple、set等)中获取每个条目

把这些线改成

  for i in array:
    total = total + i

你得到了你想要的

输出:

Calculating Price
Enter a price: 10
The total cost is 10.0
Calculating Price
Enter a price: 20
The total cost is 30.0
Calculating Price
Enter a price: 15
The total cost is 45.0
Calculating Price
Enter a price: 
Goodbye

更新:

正如评论中提到的,你需要了解更多关于缩进的信息。查看评论中的链接。在

相关问题 更多 >