如何确定文本文件中有多少个奇数和偶数?

How do I determine how many odd and even numbers are in a text file?

def main():

    #Open the numbers.txt file
    File=open ('numbers.txt', 'r')

    #This reads the lines in the file
    for line in File:
        #Convert line to float
        amount=float(line)

        #format and display the amount
        print(format(amount,'.2f'))
        print("\n")

    #close the file
    File.close()

    for amount in range (0,13):
        if (amount%2==0):
            print amount


main()

输出应该是这样的:

53
15
21
49
8
98
55
21
76
75
53
28

Total of even numbers:[]
Total of odd numbers:[]

如果所有数字都是整数(浮点数没有明确定义的偶数和奇数概念):

import itertools

def odd(i):
    return i % 2

def sumoddevens(fn):
    with open(fn) as f:
        nums[int(s.strip()) for s in f]
    nums.sort(key=odd)
    results = [0, 0]
    for k, g in itertools.groupby(nums, key=odd):
        results[k] = sum(g)
    return results

returns 一个 2 项列表,首先是偶数之和,然后是奇数之和。如果文件不是太大而无法放入内存,则此方法效果很好;如果文件非常大,则:

    results = [0, 0]
    with open(fn) as f:
        for s in f:
            i = int(s.strip())
            results[odd(i)] += i
    return results

虽然更简洁,但速度较慢,但​​无论文件大小如何。

补充:有些人可能会对我声称后一个版本 "is slower" 感到惊讶——毕竟它是 O(N) 而前者有一个 sort 因此它是 O(N log N) .

但是,big-O 是关于 "worst case",而不是 典型的 性能。 Python 的 "timsort" 通常快得惊人,因为它充分利用了现实世界数据中常见的任何现有 "partial sortedness"(这个特定的 key,只产生两个值, 使得更有可能);前一个版本依赖sortgroupbysum的超级优化内码,而后者则不能。

当然,在某些时候(足够大的文件)以前的版本会受到影响 - 但这很可能是在总和变得如此之大以至于 + 不再是 O(1) 的时候(对足够大的整数求和实际上是 O(log N) -- 想一想!-),and/or 在数据不能很好地放入内存的点附近。

所以 在实践中,对于 "fit comfortably in memory" 的文件,我在比赛中的钱会花在以前的版本上,无论 big-O 说什么:-)

除非你在 numbers.txt 中确实有浮点数,否则只需转换为 int:

with open("numbers.txt") as f:
    odds = []
    evens = []
    for num in f:
        num = int(num)
        if num % 2: # if there is a remainder num is odd
            odds.append(num) 
        else: # else it must be even
            evens.append(num)

print("All even numbers: {}".format(evens))
print("All odd numbers: {}".format(odds))
print("Total amount of even numbers: {}".format(len(evens))) # len will be total even nums
print("Total amount of odd numbers: {}".format(len(odds)))

如果您只想要计数:

with open("numbers.txt") as f:
    odd,even = 0, 0
    for num in f:
        num = int(num)
        if num % 2:
            odd += 1
        else:
            even += 1

print("Total amount of even numbers: {}".format(even))
print("Total amount of odd numbers: {}".format(odd))
def even_numbers(file_name):
    with open(file_name) as f:
      even_numbers = []
      for line in f:
          line = line.strip()
          if line.isdigit():
              if int(line) % 2 == 0:
                  print(line)

even_numbers('hello.txt')