如何在python中的列表中添加浮点数?

时间:2017-07-08 04:46:30

标签: python sum floating

如何在输入文件中添加正方形的总和

输入文件是一个txt文件,如下所示:

10 9 8 7 1 2 3 4
3 -4 1 -2
0.743 -12.3 5.3333 3
-3.3

因此输出可能如下所示;

324.0
30.0
189.28613789000002
10.889999999999999

我无法使用sum添加浮动数字,因为它显示错误,所以任何帮助都会非常感激。

这是我的代码:

#Ask the user to input a file name
file_name=input("Enter the Filename: ")

#Opening the desired file to read the content
infile=open(file_name,'r')

#Importing the math library
import math

#Iterating for the number of lines in the file
for line in infile:

    #Converting the file to a list row by row
    line_str=line.split()

    for element in range(len(line_str)):
        line_str[element]=float(line_str[element])
        line_str[element]=math.pow(line_str[element],2)
        total=sum(line_str[0:len(element)])
        print(total)

3 个答案:

答案 0 :(得分:2)

您的代码存在多个问题。

  1. 你得到的错误是因为:

    total=sum(line_str[0:len(element)])
    

    和元素是一个整数,因为它遍历range()生成的值。

  2. 您拥有total isation并在for循环中打印。您为每个元素调用print,而不是每行都调用,因此无法获得所需的输出。

  3. 这:line_str[0:0]会为您提供一个空列表,您使用此列表:line_str[0:element]将永远不会包含最后一个元素

  4. 这是一个适用于最小变化的版本:

    #Ask the user to input a file name
    # file_name=input("Enter the Filename: ")  # temporary commented out for easier testing.
    file_name = "input.txt"  
    
    #Opening the desired file to read the content
    infile=open(file_name,'r')
    
    #Importing the math library
    import math
    
    #Iterating for the number of lines in the file
    for line in infile:
    
        #Converting the file to a list row by row
        line_str=line.split()
    
        for element in range(len(line_str)):
            line_str[element]=float(line_str[element])
            line_str[element]=math.pow(line_str[element],2)
        total=sum(line_str[0:element+1])
        print(total)
    

    这给出了:

    324.0
    30.0
    189.28613789000002
    10.889999999999999
    

    但可以大大改进:

    • 在作业中使用=周围的空格
    • 请勿使用for .... range(somelist):,然后将somelist编入索引。而是使用枚举。
    • 将转换组合为float并拆分行
    • 在'#'之后使用空格在评论中

    这些方面的东西:

    # Ask the user to input a file name
    # file_name=input("Enter the Filename: ")
    file_name = "input.txt"
    
    # Opening the desired file to read the content
    infile=open(file_name,'r')
    
    # Importing the math library
    import math
    
    # Iterating for the number of lines in the file
    for line in infile:
    
        # Converting the file to a list row by row and convert to float
        line_str = [float(x) for x in line.split()]
    
        for idx, element in enumerate(line_str):
            line_str[idx] = math.pow(element,2)
        total = sum(line_str)
        print(total)
    

答案 1 :(得分:1)

for line in infile:
    numbers = map(float, line.split())
    squares = (i ** 2 for i in numbers)
    print(sum(squares))

答案 2 :(得分:0)

我认为你误解了分裂功能及其作用。

>>> for element in range(len(line_str)):
...         line_str[element]=float(line_str[element])
...         line_str[element]=math.pow(line_str[element],2)
...         total=sum(line_str[0:len(element)])
...         print(total)
...
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
TypeError: object of type 'int' has no len()

split获取字符串,并在每个空格处将字符串拆分为子字符串,每个子字符串是列表中的元素

您的循环代码的行为就像您需要在字符串中找到各个数字一样。

>>> import math
>>> line = "10 9 8 7 1 2 3 4"
>>> line_str = line.split()
>>> line_str
['10', '9', '8', '7', '1', '2', '3', '4']
>>> for i,value in enumerate(line_str):
...   fvalue = float(value)
...   line_str[i] = math.pow(fvalue,2)
...
>>> line_str
[100.0, 81.0, 64.0, 49.0, 1.0, 4.0, 9.0, 16.0]
>>> sum(line_str)
324.0
>>>

所以现在让我们遍历列表(使用上面建议的枚举)并将每个元素转换为float,使用math.pow将其平方并将其存储在同一列表中。您可以将列表传递给sum()以获得总数。 Python的美妙之处在于,您可以随时进入解释器并逐个运行命令并调查结果。

math.pow(fvalue,2)

现在您可能有一天会问自己的问题是,为什么我刚刚完成fvalue**2甚至fvalue*fvalue

时我想使用{{1}}

准备就绪后,您可以在此处阅读Exponentials in python x.**y vs math.pow(x, y)