我需要编写一个程序,生成一个名为file_size的随机整数,介于4和7之间,然后打印它们,但每个随机整数必须介于5和19之间,并且是奇数。副本是可以的。总而言之,如果file_size为6,则必须打印从5到19的6个奇数。顺便说一下,我用的是Python 3。这是我目前所看到的:
import random
file_size = random.randint(4, 7)
print("file_size = ", file_size)
for _ in range(file_size):
random_num = random.randint(5, 19)
if random_num % 2 ==1:
print(random_num)
示例运行的输出如下:
file_size = 5
19
11
15
7
这显然不是我要找的。请帮助。
您的循环运行file_size
次,但只在随机生成的数字为奇数时打印,这意味着您通常会得到比期望的更少的结果。要得到一个随机奇数,你需要不断生成随机值,直到得到一个奇数,例如:
def random_odd(low, high):
while True:
ret = random.randint(low, high)
if ret % 2 == 1:
return ret
您可以根据需要进行调整,并编写单元测试来验证您期望的随机生成行为。然后,在您的file_size
代码中使用这个帮助器:
for _ in range(file_size):
print(random_odd(5, 19))
正如horns所建议的那样,random.randrange()
确实是你想要的函数,但一般来说,辅助函数模式是一个很好的选择——将你的代码的职责分成几个部分,这样每个部分在概念上更简单,可以独立验证。
您当前的代码非常接近。只需使用randrange
,步骤为2而不是randint
。这不会产生任何偶数,所以你会得到正确数量的奇数。但是,您需要将上界增加1,因为randint
包含上界,而randrange
不包含上界,就像内置的range
函数一样。
random_num = random.randrange(5, 20, 2)