2017-07-17 36 views
2

我正在处理一个文本文件,其中填充了由空格分隔的数字字符串。我试图找到文件中数值在1到1,000,000之间的数值。我目前有这只打印数字。有关如何查找数量的任何建议?查找一定范围内的数字量

for line in file: 
    for number in line: 
     if "0" < number < "1000000": 
      print(number) 
+0

提示:在循环前初始化一个计数变量,然后在找到符合条件的数字时继续向该变量添加一个。 –

+0

有一个变量,你每次比赛时增加 – litelite

+0

这是*不正确的方法。 –

回答

0
file_object = open("numbers", "r") 
count = 0 
for line in file_object:  
    for number in line.split(): 
     if int(number) > 10 and int(number) < 100: 
      count = count + 1 
print(count) 
+1

谢谢你的帮助! –

+0

我讨厌再次遇到问题,但是您是否知道是否有办法在不重新进入的情况下循环多个范围。即0-100,101-200等 –

+0

当然,只需复制if块,将“if”改为“elif”(表示:else if)并更改范围。 (请参阅:https://www.tutorialspoint.com/python/python_if_else.htm) –

1

首先,投你number变量这样一个int:int(number)和使用整数,而不是字符串比较。像这样:if 0 < int(number) < 10000

此外,添加一个像建议的一些意见的计数器。下面是完整的代码:

counter = 0 
for line in file: 
    for number in line: 
     if 0 < number < 1000000: 
      counter += 1 
+0

谢谢你的帮助! –

4

你的做法是不正确

  • number是一条线的每一个字符。所以这些只能是数字,字母等。不是多位数字;和
  • 与字符串的比较是按字典顺序

但是,您可以轻松地计算这个像:

sum(0 < int(n) < 1000000 for line in file for n in line.split() if n.strip())

int(..)蒙上了字符串等价物(积分)号。因此'100'转换为100。如果我们想要执行数字比较,这是必需的。

split()用于获取文件中的数字。它会查找空白等,并分割这些部分。

如果数字格式良好,if n.strip()可以是可选的。但是,这可能是有问题的:例如,如果你有拖尾新线等

+0

谢谢你的帮助! –

2

如果文件只有数字,你可以使用类似:

with open(path, 'r') as f: 
    print sum(1 for x in f.read().split() if 10000 > int(x) > 0) 

这将在整个文件中的数数无需单独计算每条线。

+0

谢谢你的帮助! –