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

时间:2015-01-20 15:22:08

标签: python python-3.x

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:[]

2 个答案:

答案 0 :(得分:1)

除非你实际上在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))

答案 1 :(得分:0)

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

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

返回一个2项列表,首先是偶数之和,然后是奇数之和。如果文件不是太大而不适合内存,这种方法很有效;如果文件非常庞大,那么:

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

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

补充:有些人可能会对我的说法感到惊讶,因为后者版本的速度较慢" - 毕竟它是O(N)而前者有sort因此它是O(N log N)。

但是,big-O是关于"最坏的情况",而不是典型的性能。 Python" timsort"通常是超自然的快速,因为它充分利用任何现有的"部分排序"来自现实世界的数据如此常见(这个特定的key,只产生两个值,更有可能);前一版本依赖于sortgroupbysum的超级优化内部代码,而后者则无法使用。

当然,在某些时候(足够大的文件),前一版本会受到影响 - 但是当和数变得如此之大以至于+不是{{1} }任何更多(总和足够大的整数实际上是O(1) - 想一想! - ),和/或在数据无论如何都不适合记忆的地方。

所以在实践中,对于那些能够舒适地适应记忆的文件而言,我在比赛中的资金将用于以前的版本,无论大O说什么:-)