如何在输入文件中添加正方形的总和?
输入文件是一个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)
答案 0 :(得分:2)
您的代码存在多个问题。
你得到的错误是因为:
total=sum(line_str[0:len(element)])
和元素是一个整数,因为它遍历range()
生成的值。
您拥有total
isation并在for循环中打印。您为每个元素调用print
,而不是每行都调用,因此无法获得所需的输出。
这:line_str[0:0]
会为您提供一个空列表,您使用此列表:line_str[0:element]
将永远不会包含最后一个元素
这是一个适用于最小变化的版本:
#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
编入索引。而是使用枚举。这些方面的东西:
# 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
准备就绪后,您可以在此处阅读Exponentials in python x.**y vs math.pow(x, y)