如何使这个循环停止在某个变量发生

时间:2016-10-18 10:48:30

标签: python python-2.7 loops random

我需要编写一个脚本,在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

非常感谢你的帮助

2 个答案:

答案 0 :(得分:2)

咦。您的代码中存在一些缺陷(或至少不清楚的地方)。

  1. 您的循环次数最多为257000次。即使概率很低,也有可能没有达到你在循环中寻找的数字。

  2. randrange语句移出循环,不需要每轮都有python检查加载的模块。

  3. 您可以使用生成器选择列表(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. 来电。

  4. 在循环中定义一个闭合函数,每次在新的内存地址处创建一个新函数。

  5. 您将结果切片为每个包含10个元素的列表;这是用于打印,还是你真的需要将这些列表中的随机整数分组?

  6. 您描述的问题的一个非常简单和直接的实现可能是:

    {{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
>>>