我需要编写一个脚本,在1-257000之间生成随机数,并在发生某个数字时停止告诉我到目前为止生成了多少个数字。
我为了达到这个目的而做了很多但似乎无法让它停下来或计算
x=1
while x < 257000:
import itertools
import random
def random_gen(low, high):
while True:
yield random.randrange(1, 257000)
gen = random_gen(1, 100)
items = list(itertools.islice(gen, 10))
print items
x = x+1
非常感谢你的帮助
答案 0 :(得分:2)
咦。您的代码中存在一些缺陷(或至少不清楚的地方)。
您的循环次数最多为257000次。即使概率很低,也有可能没有达到你在循环中寻找的数字。
将randrange
语句移出循环,不需要每轮都有python检查加载的模块。
您可以使用生成器选择列表(randint()
),只需使用import random
num = 0 # Our counter
certain_number = 123456 # The number we seek
while True: # Run until we break
# Increment for each new step
num += 1
# Generate a single number from the given range
random_number = random.randint(1, 257000)
if random_number == certain_number:
# Break if we hit it
break
print('Hit after {} tries.'.format(num))
>>> Hit after 382001 tries.
来电。
在循环中定义一个闭合函数,每次在新的内存地址处创建一个新函数。
您将结果切片为每个包含10个元素的列表;这是用于打印,还是你真的需要将这些列表中的随机整数分组?
您描述的问题的一个非常简单和直接的实现可能是:
{{1}}
答案 1 :(得分:0)
首先,将您的import
语句和函数定义放在的while循环中。那是超级多余。
>>> def random_gen(low,high):
... while True:
... yield random.randrange(low,high)
...
>>> lucky = 7
>>> rg = random_gen()
>>> rg = random_gen(1,1000)
>>> next(itertools.dropwhile(lambda t: t[1] != lucky, enumerate(rg, 1)))
(811, 7)
>>>
这是另一场比赛,只是为了好玩:
>>> rg = random_gen(1,257000)
>>> n,L = next(itertools.dropwhile(lambda t: t[1] != lucky, enumerate(rg, 1)))
>>> n
22602
>>> L
7
>>>