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:[]
答案 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
,只产生两个值,更有可能);前一版本依赖于sort
,groupby
和sum
的超级优化内部代码,而后者则无法使用。
当然,在某些时候(足够大的文件),前一版本会受到影响 - 但是当和数变得如此之大以至于+
不是{{1} }任何更多(总和足够大的整数实际上是O(1)
- 想一想! - ),和/或在数据无论如何都不适合记忆的地方。
所以在实践中,对于那些能够舒适地适应记忆的文件而言,我在比赛中的资金将用于以前的版本,无论大O说什么:-)