用Python计算文件中奇数和偶数的总数

问题描述 投票:2回答:3
def main():

    infile = open('numbers.txt','r')

    evenTotal = 0
    oddTotal = 0

    line = infile.readline()

    while line != '':
        total += int(line)
        line = infile.readline()

    print('The total for the even numbers is',evenTotal)
    print('The total for the odd numbers is',oddTotal)

    infile.close()
    print('All done!')

main()

我试图这样做,以便程序从其目录中的文件中读取数字,然后分离,计算并显示这两组数字的总和。我遇到的麻烦是识别赔率和偶数的中间部分。我确实知道我在中间编写的while循环可以计算总数,但是我不知道如何修改它以使其达到我想要的效果。

python python-3.4
3个回答
1
投票

为了检查数字是奇数还是偶数,应该使用模运算符。

如果一个整数可以被2整除,那么它将是偶数,否则它是奇数。所以...

while line != '':
    if int(line) % 2 == 0:
         evenTotal += int(line)
    else
        oddTotal += int(line)
    line = infile.readline()

2
投票

从itertools中,您可以使用分区配方将其划分为偶数和奇数并返回它们的总和

from itertools import ifilterfalse,imap,ifilter,tee
def partition(pred, iterable):
    'Use a predicate to partition entries into false entries and true entries'
    # partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
    t1, t2 = tee(iterable)
    return ifilterfalse(pred, t1), ifilter(pred, t2)

def is_odd(x):
    return bool(x%2)

list_of_ints = imap(int,filter(lambda x:x.strip().isdigit(),infile))
odds, evens= partition(is_odd,list_of_ints)
print sum(evens),sum(odds) 

它可能比朋友们的回答要慢一些...但这是一个很好的模式,可以知道

或作为聊天中的@JonClements pointed out

r = range(11)
d = dict.fromkeys([0, 1], 0)
for i in r: d[i % 2] += i

这是一种整洁的方法


1
投票

将此数字用于偶数

def even_numbers(maximum):
    return_string = ""
    for x in range(2,maximum+1,2):
        return_string += str(x) + " "
    return return_string.strip()
© www.soinside.com 2019 - 2024. All rights reserved.