如何打印带有包含浮点值的变量的字符串



我对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)]

编辑:

你的问题似乎与你的"数字"列表有关。如果它是一个用字符串表示的数字列表,则必须首先将它们强制转换为int(或float(:
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)

最新更新