假设我从0-9重复生成随机整数,直到给定数字出来。我需要的是一个函数,它计算在这种情况发生之前生成的整数数量。请帮帮我。
这就是我尝试过的,我把它放1000,因为它足够大但我不认为它是正确的,因为我的数字可以在1000次迭代后出现。
for i in range(1000):
d = randint()
if d <> 5:
cnt = cnt + 1
if d == 5:
break
答案 0 :(得分:10)
假设 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)
计算迭代器的长度。答案 1 :(得分:9)
一些事情:
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)
将其转换为函数留给读者练习。
答案 2 :(得分:2)
itertools.count
通常比使用带有显式计数器的while循环更整洁
import random, itertools
for count in itertools.count():
if random.randint(0, 9) == 5:
break
如果您希望计数包含生成5的迭代,只需使用itertools.count(1)
答案 3 :(得分:1)
from random import randint
count = 0
while randint(0, 9) != 5:
count += 1
答案 4 :(得分:0)
这应该有效:
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