Python计数行数小于或大于

时间:2013-06-05 18:40:42

标签: python

我是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我出错但不确定如何。

3 个答案:

答案 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