簡體   English   中英

如何使此循環在某個變量處停止

[英]How can I make this loop stop at a certain variable occurs

我需要編寫一個腳本,該腳本生成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

非常感謝你的幫助

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

  1. 您最多可運行257000次循環。 即使概率很低,也有可能您沒有在循環中找到所需的數字。

  2. 將您的import語句移出循環,無需在每個回合中讓python檢查加載的模塊。

  3. 您可以使用生成器來選擇列表( randrange ),而只需使用randint()調用即可。

  4. 您可以在循環中定義一個封閉函數,該函數每輪在一個新的內存地址創建一個新函數。

  5. 您將結果分成10個元素的列表。 是用於打印,還是您實際上需要將隨機整數分組到此類列表中?

您描述的問題的一個非常簡單明了的實現可能是:

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.

首先,將import語句和函數definitons 放在 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
>>>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM