我有一个代码依赖于我阅读文本文件,打印有数字的数字,打印特定的错误消息,其中有字符串而不是数字,然后将所有数字相加并打印它们的总和(然后仅将数字保存到新文本文件中。)
我一直在尝试这个问题几个小时,我有下面的内容。
我不知道为什么我的代码似乎没有正确总结。
和python代码:
f=open("C:\\Users\\Emily\\Documents\\not_just_numbers.txt", "r")
s=f.readlines()
p=str(s)
for line in s:
printnum=0
try:
printnum+=float(line)
print("Adding:", printnum)
except ValueError:
print("Invalid Literal for Int() With Base 10:", ValueError)
for line in s:
if p.isdigit():
total=0
for number in s:
total+=int(number)
print("The sum is:", total)
答案 0 :(得分:4)
我有一个代码依赖于我阅读文本文件,打印出来 有数字的数字,打印特定的错误消息 哪里有字符串而不是数字,然后总结所有 数字和打印他们的总和(然后只保存数字到一个 新文本文件)。
所以你必须做以下事情:
这是一种方法:
total = 0
with open('input.txt', 'r') as inp, open('output.txt', 'w') as outp:
for line in inp:
try:
num = float(line)
total += num
outp.write(line)
except ValueError:
print('{} is not a number!'.format(line))
print('Total of all numbers: {}'.format(total))
答案 1 :(得分:1)
每次输入新行时,如果数字为数字,则将总计重置为零。
您可能希望在进入循环之前初始化总数。
我尝试使用isdigit和isalpha调试for循环 显然,每一个新行都不被视为数字或字母数字,这些数字或字母数字总是被评估为假
事实证明你不需要for循环,你已经用你的try语言完成了大部分程序
以下是我在系统上的表现。
f = open("/home/david/Desktop/not_just_numbers.txt", 'r')
s = f.readlines()
p = str(s)
total = 0
for line in s:
#print(int(line))
printnum = 0
try:
printnum += float(line)
total += printnum
#print("Adding: ", printnum)
except ValueError:
print("Invalid Literal for Int() With Base 10:", ValueError)
print("The sum is: ", total)
答案 2 :(得分:1)
以下是您可以做的事情:
data.txt中:
1
2
hello
3
world
4
代码:
total = 0
with open('data.txt') as infile:
with open('results.txt', 'w') as outfile:
for line in infile:
try:
num = int(line)
total += num
print(num, file=outfile)
except ValueError:
print(
"'{}' is not a number".format(line.rstrip())
)
print(total)
--output:--
'hello' is not a number
'world' is not a number
10
$ cat results.txt
1
2
3
4
答案 3 :(得分:1)
您正在检查错误的情况:
for line in s:
if p.isdigit():
p
就是这样:
s=f.readlines()
p=str(s)
作为列表的str
ified版本,它将以'['
开头,因此p.isdigit()
将始终为false。您想要检查line.isdigit()
,并且您只想初始化total
一次,而不是每次都围绕循环:
total = 0
for line in f:
if line.isdigit():
total += int(line)
请注意,通过直接迭代f
,您也不需要拨打readlines()
。
答案 4 :(得分:1)
你也可以试试这个:
f=open("C:\\Users\\Emily\\Documents\\not_just_numbers.txt", "r")
ww=open("C:\\Users\\Emily\\Documents\\not_just_numbers_out.txt", "w")
s=f.readlines()
p=str(s)
for line in s:
#printnum=0
try:
#printnum+=float(line)
print("Adding:", float(line))
ww.write(line)
except ValueError:
print("Invalid Literal for Int() With Base 10:", ValueError)
total=0
for line in s:
if line.strip().isdigit():
total += int(line)
print("The sum is:", total)
此处str.strip([chars])
表示
返回删除了前导和尾随字符的字符串副本。 chars参数是一个字符串,指定要删除的字符集。如果省略或None,则chars参数默认为删除空格。 chars参数不是前缀或后缀;相反,其值的所有组合都被剥离
答案 5 :(得分:0)
$ echo -e '1/n2/n3/n4/n5' | python -c "import sys; print sum(int(l) for l in sys.stdin)"
答案 6 :(得分:0)
这是对文件中所有数字求和的非常短的方法(您将必须添加try和except)
import re
print(sum(float(num) for num in re.findall('[0-9]+', open("C:\\Users\\Emily\\Documents\\not_just_numbers.txt", 'r').read())))