我的代码能解决问题吗?我是python

时间:2019-03-12 05:30:27

标签: 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)# 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   

8 个答案:

答案 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)

您不需要为evenodd数字使用那些单独的方法,只需为两个数字都保留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.