假设我反复生成 0-9 的随机整数,直到出现给定的数字。我需要的是一个函数,它计算在这种情况发生之前生成了多少整数。请帮我解决一下这个。
这是我尝试过的,我放了 1000,因为它足够大,但我认为它不正确,因为我的数字可以在 1000 次迭代后出现。
for i in range(1000):
d = randint()
if d <> 5:
cnt = cnt + 1
if d == 5:
break
假设我反复生成 0-9 的随机整数,直到出现给定的数字。我需要的是一个函数,它计算在这种情况发生之前生成了多少整数。请帮我解决一下这个。
这是我尝试过的,我放了 1000,因为它足够大,但我认为它不正确,因为我的数字可以在 1000 次迭代后出现。
for i in range(1000):
d = randint()
if d <> 5:
cnt = cnt + 1
if d == 5:
break
假设5是您期望的数字:
sum(1 for _ in iter(lambda: randint(0, 9), 5))
如果要包含最后一个数字,可以加1 。
说明:
iter(function, val)
返回一个迭代器,该迭代器调用function
直到
val
返回。lambda: randint(0, 9)
是返回 的函数(可以调用)randint(0, 9)
。sum(1 for _ in iterator)
计算迭代器的长度。一些东西:
while
循环而不是for
循环。!=
不等式运算符而不是<>
.这里有一些东西可以帮助你开始:
import random
count = 0
while True:
n = random.randint(0, 9)
count += 1
if n == 5:
break
你也可以写:
import random
count = 1
n = random.randint(0, 9)
while n != 5:
count += 1
n = random.randint(0, 9)
将其转换为函数留给读者作为练习。
itertools.count
通常比使用带有显式计数器的 while 循环更整洁
import random, itertools
for count in itertools.count():
if random.randint(0, 9) == 5:
break
如果您希望计数包括生成 5 的迭代,只需使用 1 从 1 开始计数 itertools.count(1)
from random import randint
count = 0
while randint(0, 9) != 5:
count += 1
这应该有效:
from random import randint
# Make sure 'cnt' is outside the loop (otherwise it will be overwritten each iteration)
cnt = 0
# Use a while loop for continuous iteration
while True:
# Python uses '!=' for "not equal", not '<>'
if randint(0, 9) != 5:
# You can use '+=' to increment a variable by an amount
# It's a lot cleaner than 'cnt = cnt + 1'
cnt += 1
else:
break
print cnt
或者,以函数形式:
from random import randint
def func():
cnt = 0
while True:
if randint(0, 9) != 5:
cnt += 1
else:
break
return cnt