我是python的新手并编写一个程序来计算行数。该文件如下所示:
0.86149806
1.8628227
-0.1380086
-1
0.99927421
-1.0007207
0.99927421
0.99926955
-1.0007258
我的代码尝试如下:
counterPos = 0
counterNeg = 0
counterTot = 0
counterNeu = 0
with open('test.txt', 'r') as infile:
for line in infile:
counterTot += 1
for i in line:
if i > 0.3:
counterPos += 1
elif i < -0.3:
counterNeg += 1
else:
counterNeu += 1
我正在尝试将所有低于-0.3的行计数到counterNeg
,高于0.3的所有行计为counterPos
,并且所有行的数字都在0.29到-0.29之间{ {1}}。
它似乎不起作用,我知道counterNeu
我出错但不确定如何。
答案 0 :(得分:6)
您的line
是一个字符串,但您希望将其解析为float
。只需使用float(line)
。
为了以防万一,最好从行的开头和结尾删除所有空格。所以:
for line in infile:
i = float(line.strip())
# ... count
答案 1 :(得分:3)
您正在使用一个额外的循环。 从文件中读取的数据也是以&#34; \ n&#34;作为结束字符。使用strip()删除&#34; \ n&#34;然后将数据转换为float。
结束代码应该是:
counterPos = 0
counterNeg = 0
counterTot = 0
counterNeu = 0
with open('temp.txt', 'r') as infile:
counterTot += 1
for i in infile:
if float(i.strip()) > 0.3:
counterPos += 1
elif float(i.strip()) < -0.3:
counterNeg += 1
else:
counterNeu += 1
答案 2 :(得分:-1)
当我发现自己做了很多测试时,我通常会沿着这些方向做点什么:
data='''\
0.86149806
1.8628227
-0.1380086
-1
0.99927421
-1.0007207
0.99927421
0.99926955
-1.0007258'''
def f1(x):
''' >0.3 '''
return x>0.3
def f2(x):
''' <-0.3 '''
return x<-.3
def f3(x):
''' not f1 and not f2 '''
return not f1(x) and not f2(x)
tests={f1: 0,
f2: 0,
f3: 0 }
for line in data.splitlines():
for test in tests:
if test(float(line.strip())):
tests[test]+=1
for f,v in sorted(tests.items()):
print '{:3}{:20}:{}'.format(f.__name__, f.__doc__, v)
打印:
f1 >0.3 :5
f2 <-0.3 :3
f3 not f1 and not f2 :1