编写一个程序,该程序会生成100个随机数,并保留这些随机数中偶数个和奇数个数的计数。
import random
def main():
print("There",even(),"even numbers\n")
print("There",odd(),"even numbers")
def even():
even_count=0
for i in range(0,100):
x= random.randint(1,100)# genreates random numbers
if (x % 2) == 0:#finds odd numbers
even_count += 1 #keeps count of even numbers
return even_count
def odd():
odd_count=0
for i in range(0,100):
x= random.randint(1,100)# genreates random numbers
if (x % 2) != 0: #finds odd numbers
odd_count+=1 #keeps count of odd numbers
return odd_count
答案 0 :(得分:0)
假设您应该在同一个数字袋中计算偶数和奇数,那么就没有,因为您没有为每个函数计算相同的集合。
即您将生成100个数字并计算出偶数,然后再生成100个新数字并计算出奇数。
您是否还需要单独的功能?除偶数或奇数之外,数字可以是其他任何数字吗?
答案 1 :(得分:0)
是,不是。从技术上讲,您会生成200个随机数。
由于调用even()
并生成100,因此odd()
并生成100 + 100 = 200。
您可以这样做:
from random import randint
even = sum(randint(0, 100) % 2 == 0 for _ in range(0, 100))
odd = 100 - even
print('{} Even, {} Odd'.format(even, odd)
另一种方法,并且是一种稍快的方法,是一种惰性跟踪器。它基本上存储顺序生成的数字(即range()
),而不存储随机生成的数字。由于您不在乎会生成什么数字,因此我们只使用顺序生成的计数作为理解中成功条件的数量:
even = len([x for x in range(0, 100) if randint(0, 100) % 2 == 0])
odd = 100 - even
此方法要快几秒钟,因为与sum()
不同,我们不必回头计算True
出现的次数(sum()
视为1
)。因此,我们可以存储所处范围内的任何数字,并让list.length
的本机列表属性在此过程中得到更新。成功存储的数量是生成的偶数值的数量。
答案 2 :(得分:0)
您不需要为even
和odd
数字使用那些单独的方法,只需为两个数字都保留counter
:
import random
even_count = 0
odd_count = 0
for i in range(0,100):
x = random.randint(1,100)# genreates random numbers
if (x % 2) != 0: # finds odd numbers
odd_count += 1
else:
even_count += 1
print("There are {} even and {} odd numbers.".format(even_count, odd_count))
输出:
There are 51 even and 49 odd numbers.
答案 3 :(得分:0)
修改您的方法。您只需要一个功能:
import random
def main():
even,odd = generator()
print("There are ",even," even numbers\n")
print("There are ",odd," odd numbers")
def generator():
even_count = 0
odd_count = 0
for i in range(0,100):
x= random.randint(1,100)# genreates random numbers
if (x % 2) == 0: #finds odd numbers
even_count += 1 #keeps count of even numbers
else:
odd_count += 1 #keeps count of odd numbers
return even_count,odd_count
main()
希望这能回答您的问题!
答案 4 :(得分:0)
您的问题可以一行表达为count = len(filter(predicate, values))
实现此:
from random import randint
count = len(filter(lambda _: randint(1,100)%2 == 0, range(100)))
print '{0} even, {1} odd.'.format(count, 100-count)
尽管在实践中,您可能应该将程序分解为一些中间步骤,以提供对算法有用的中间值。
def is_even(x):
return x % 2 == 0
def is_odd(x):
return x % 2 == 1
values = [randint(1,100) for _ in range(100)]
evens = filter(is_even, values)
odds = filter(is_odd, values)
print '{0} even, {1} odd.'.format(len(evens), len(odds))
输出:
47 even, 53 odd.
53 even, 47 odd.
答案 5 :(得分:0)
您正在创建200个号码。 您可以通过一个功能来做到这一点
import random
def main():
odd , even = odd_or_even()
print("There",even,"even numbers\n")
print("There",odd,"even numbers")
def odd_or_even():
even_count=0
odd_count=0
for i in range(0,100):
x= random.randint(1,100)# genreates random numbers
if (x % 2) == 0:#finds odd numbers
even_count += 1 #keeps count of even numbers
else:
odd_count+=1 #keeps count of odd numbers
return odd_count, even_count
答案 6 :(得分:0)
我将您的代码压缩为一个较小的脚本,因为一开始有很多不必要的代码。您的代码也肯定会回答这个问题。 随机导入 来自随机进口randint
def main():
even_count=0
odd_count = 0
for i in range(0,100):
x = randint(1,100)# genreates random numbers
if (x % 2) == 0:#finds odd numbers
even_count += 1 #keeps count of even numbers
else:
odd_count += 1
print(even_count)
print(odd_count)
main()
答案 7 :(得分:-1)
我该怎么做,从代码中消除麻烦,如果您要重复代码,可以使其更简单。
import random
def main():
random_numbers = [random.randrange(1, 101) for i in range(100)]
print(f'There are {len([x for x in random_numbers if x % 2 >= 1])} even numbers.\n'
f'There are {len([x for x in random_numbers if x % 2 == 0])} odd numbers.')
main()
# There are 45 even numbers.
# There are 55 odd numbers.