我对python很陌生,我想将average变量打印为字符串后面的浮点值,但我一直收到错误。我该怎么解决这个问题。编辑:我已经添加了我的代码的开头,以防它有助于
numbers = input ("Enter a list of numbers with a comma "," in between ")
total_num = 0
for num in numbers:
total_num += 1
average = float(sum(numbers)/total_num)
print ("The average is " , average)
这是我得到的错误
TypeError: unsupported operand type(s) for +: 'int' and 'str'
当我用python 2.6尝试这个时,它运行得很好,但我使用的是python 3.7.1,它已经停止运行
错误来自sum(numbers)
。input()
函数返回一个字符串,sum((函数尝试对字符串的字符进行迭代和求和。。。(它在python 2中起作用,因为python 2的input((函数计算字符串,在本例中返回了一个数字列表…(
您需要将数字分开(使用split(',')
(,并将字符串列表转换为浮点值。
这将起作用:
numbers = input ("Enter a list of numbers with a comma "," in between ")
numbers = [float(x) for x in numbers.split(',')]
total_num = 0
for num in numbers:
total_num += 1
average = float(sum(numbers)/total_num)
print ("The average is " , average)
(代码可以通过多种方式进行改进,我专注于所描述的问题…(
在Python 2中,input()
神奇地将内置的eval()
函数应用于用户输入的字符串。
但这被认为是一个";"安全风险";,因此在Python 3中,input()
返回用户输入的未赋值字符串。
因此,例如,如果用户键入
1、2、3
在Python 2中,input()
返回元组(1, 2, 3)
。但在Python 3下,它返回字符串"1, 2, 3"
。在Python3下,您必须自己将eval()
应用于该字符串(要理解这是"安全风险",因为eval()
最终可能会做任何事情,这取决于用户键入的内容(。
编辑2:
Python2的input
是一个不安全的方法,因为它在您的输入值上应用了eval
。Python3的input
使用了Python2中已知的raw_input
。
因此,为了以您现在接收数字的方式解析您的数字:
numbers = input ("Enter a list of numbers with a comma "," in between ")
numbers = [int(n) for n in numbers.split(',')]
或者更好的是,使用带有空格和逗号的输入,然后很容易忽略它们:
import re
numbers = input ("Enter a list of numbers with a comma "," in between ")
numbers = [int(n) for n in re.findall("d+", numbers)]
编辑:
sum(int(n) for n in numbers)
sum(float(n) for n in numbers)
因此:
average = sum(float(n) for n in numbers)/len(numbers) # Python3 division result by default are float
---其他打印方式:您可以简单地在Python3.6+上使用f-string:
average = float(sum(numbers)/total_num)
print(f"The average is {average}")
在较旧的Python版本上,您可以:
print("The average is {}".format(average))
print("The average is %f" % average) # Float formatted
print("The average is %d" % average) # Int formatted
print("The average is " + str(average))
最后,你的打印应该也能正常工作:
print("The average is", str(average))
您的错误是因为numbers
是单个字符串。
您需要拆分字符串,然后将条目强制转换为int。这将为前两行提供以下内容:
numbers = input("Enter a list of numbers with a comma "," in between ").split(',')
numbers = [int(i) for i in numbers]
然后,您可以删除整个for循环,而只使用len(numbers)
最终代码
numbers = input("Enter a list of numbers with a comma "," in between ").split(',')
numbers = [int(i) for i in numbers]
total_num = 0
average = float(sum(numbers) / len(numbers))
print("n The average is ", average)