Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取文件并打印出文件中数字总和的程序。该文件包含一个由逗号分隔的单浮点数_Python_File_Text - Fatal编程技术网

Python 读取文件并打印出文件中数字总和的程序。该文件包含一个由逗号分隔的单浮点数

Python 读取文件并打印出文件中数字总和的程序。该文件包含一个由逗号分隔的单浮点数,python,file,text,Python,File,Text,例如,如果您的文件包含: -2.5, 2.0 8.0 100.0, 3.0, 5.1, 3.6 6.5 然后,您的程序运行示例如下所示: Please enter your file name: nums.txt The sum of your numbers is 125.7. 我已经运行了这个程序,但是它给了我一个错误,说 总和=总和+浮点数 ValueError:无法将字符串转换为浮点:'.' 任何帮助都将不胜感激 filename = input("Please enter you

例如,如果您的文件包含:

-2.5, 2.0
8.0
100.0, 3.0, 5.1, 3.6
6.5
然后,您的程序运行示例如下所示:

Please enter your file name:  nums.txt
The sum of your numbers is 125.7.
我已经运行了这个程序,但是它给了我一个错误,说 总和=总和+浮点数 ValueError:无法将字符串转换为浮点:'.'

任何帮助都将不胜感激

filename = input("Please enter your file name: ")
sum_number = 0
openthefile = open(filename, "r")

for i in openthefile:
    Split = i.split(',')
    Join = "".join(Split)
    print(Join)

for i in Join:
    sum_number = sum_number + float(i)

print("The sum of your numbers is",sum_number)
这将创建一个空列表,然后针对每一行,将通过在逗号上拆分该行而获得的元素添加到列表中。最后两个步骤将元素转换为浮点数并打印总和

或者,与其跟踪列表中的所有元素,不如只跟踪总和:


您可以按如下方式进行操作:

filename = input("Please enter your file name: ")
sum_number = 0
openthefile = open(filename, "r")

for line in openthefile:
    for num in line.split(','):
        sum_number = sum_number + float(num.strip())

print("The sum of your numbers is %.1f" %(sum_number))

我们只需循环遍历文件的每一行,将该行上的所有值除以、,然后将每一行上的每个值添加到总和中。最后,我们打印出值。

您可以将map和sum与生成器表达式一起使用:

filename = input("Please enter your file name: ")

with open(filename) as f: # closes your file automatically
    print("The sum of your numbers is {:.1f}".format(sum(sum(map(float, line.split(","))) for line in f)))

The sum of your numbers is 125.7
您正在尝试加入所有浮动,然后进行铸造,即:

float("100.03.05.13.6")
因此,对于fori-in-Join:您正在对连接字符串的每个字符进行迭代,这将给出您所看到的错误。无法转换为浮动


{.1f}格式设置为小数点后1位

您可以使用生成器打印所有值的总和

with open(filename,"r")as f:
    print sum(float(e) for line in f for e in line.split(","))

>> 125.7

所以,即使你说的是单浮点[number],你也可以有多行,每行都可以有多个数字?你不能在后一个循环中打印i,看看它在每次迭代中是否有一个有效的数字吗?你不需要剥离来转换为一个数字float@PadraicCunningham你是对的,我养成了这样做的习惯,但应该改掉。我不确定为什么会有无法解释的否决票,但解决方案是正确的。耸肩:打印:你的数字之和是6.5。它应该出现:sum_number+=sum_number+floatnum.strip现在对你有效吗?+=将右侧的值与左侧的值相加,因此您不需要在右侧也有sum_数。当我运行它时,它会在我的计算机上打印出125.7。如果我用python复制并粘贴你的代码,我只会得到你的数字之和为6.5作为输出文件名=输入请输入你的文件名:openthefile=openfilename,r sum_number=0表示openthefile中的行:表示line.split中的数字,:sum_number=sum_number+floatnumbers.strip print数字的总和是,sum_number
float("100.03.05.13.6")
with open(filename,"r")as f:
    print sum(float(e) for line in f for e in line.split(","))

>> 125.7