![](/img/trans.png)
[英]How can I write while loop in order to make it stop when 2 variables got certain values? (Python)
[英]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
非常感謝你的幫助
嗯 您的代碼中存在一些缺陷(或至少不清楚的地方)。
您最多可運行257000次循環。 即使概率很低,也有可能您沒有在循環中找到所需的數字。
將您的import
語句移出循環,無需在每個回合中讓python檢查加載的模塊。
您可以使用生成器來選擇列表( randrange
),而只需使用randint()
調用即可。
您可以在循環中定義一個封閉函數,該函數每輪在一個新的內存地址創建一個新函數。
您將結果分成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.