我的代码解决了这个问题吗?我是python的初学者
编写一个程序,生成100个随机数,并记录这些随机数中有多少是偶数,有多少是奇数我的代码解决了这个问题吗?我是python的初学者,python,Python,编写一个程序,生成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)
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
假设你应该在同一袋数字中计算偶数和赔率,那么就不算了,因为你没有为每个函数计算相同的集合 i、 你要生成100个数字并计算其中有多少是偶数,然后再生成100个新数字并计算其中有多少是奇数
你甚至需要单独的功能吗?一个数字可以不是偶数或奇数吗?是,也可以不是。从技术上讲,你可以生成200个随机数 由于您调用
偶数()
,它会生成100,然后奇数()
它也会生成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
的本机列表属性在此过程中得到更新。成功存储的数量是生成的偶数值的数量。对于偶数
和奇数
数字,您不需要这些单独的方法,而只需为这两个数字保留一个计数器
:
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.
修改你的方法。您只需要一个功能:
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()
希望这能回答你的问题 我将如何做,尽可能地从代码中消除麻烦,如果您重复代码,您可以使其更简单
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.
在一行中,您的问题可以表示为
count=len(过滤器(谓词,值))
实施这一目标:
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.
您正在创建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
我将您的代码压缩成一个较小的脚本,因为一开始有很多不必要的代码。另外,您的代码肯定回答了这个问题。 随机输入 从随机导入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()
你好请具体说明您面临的问题,并粘贴您看到的任何错误消息。您的解决方案将调用偶数()生成100个数字,而奇数()也将生成100个数字。你想单独生成随机数还是只生成一次?你可能希望偶数和奇数加起来是100。如果你从两个不同的数字列表中计算赔率和偶数,情况就不会是这样了。因此,首先生成数字。然后计算赔率,你可以通过减法算出偶数。只需调用
偶数()
,然后将结果从100中减去,就可以算出奇数。您不需要使用odd()
方法。不需要创建一个列表来计算它的len。do偶数=sum(randint(01100)%2==0表示范围(01100))
@Jean-Françoisfare非常正确。事实上,我最初的帖子总是把变成偶数100,因为它包含100个布尔值。使用列表需要一个嵌套表达式。@Jean-Françoisfare实际上,请参阅我的更新。有时比sum()
稍快一些,因为len()
是常数时间,我们不关心随机生成的数字是什么。你做了吗?因为创建一个列表是昂贵的len
不是问题,但您首先要创建一个列表。我敢肯定,如果你把那sum
wins@Jean-弗朗索瓦·法布雷·耶伊坐在板凳上,sum
每输10-15秒;使用timeit.timeit()
。我必须运行更多的测试,但似乎因为sum
必须返回,所以构建列表的追加操作比sum
迭代时稍微优化一些。当然,情况并非总是如此,因为有时sum
更快。取决于生成了多少“随机”偶数。无论如何,我仍然认为sum
更好,因为它是一个生成器表达式。您的代码调用奇数或偶数()
两次,这是不需要的。更新:即使您做了更改,您也要对容器进行两次迭代,只需执行一次。@pstatix是的,我意识到:P修复了它,现在它只是一个函数。您和我的区别在于,如果需要访问奇数和偶数,实际上存在一个奇数和偶数列表,你只是从100中减去,得到可能的余数。所以这取决于你想做什么。OP要求生成一组100个数字。因此,如果你计算出这100人中有23人是偶数,剩下的77人是奇数。我建议你重读这篇文章,并相应地更新你的解决方案。
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()