Python 计算随机数
假设我重复生成0-9之间的随机整数,直到给出一个给定的数字。我需要的是一个函数,它计算在此之前生成多少个整数。请帮我做这个 这就是我尝试过的,我把1000放在这里是因为它足够大,但我认为它不正确,因为我的数字可能在1000次迭代之后出现Python 计算随机数,python,Python,假设我重复生成0-9之间的随机整数,直到给出一个给定的数字。我需要的是一个函数,它计算在此之前生成多少个整数。请帮我做这个 这就是我尝试过的,我把1000放在这里是因为它足够大,但我认为它不正确,因为我的数字可能在1000次迭代之后出现 for i in range(1000): d = randint() if d <> 5: cnt = cnt + 1 if d == 5: break 范围(1000)内的i的: d=randint() 如果d
for i in range(1000):
d = randint()
if d <> 5:
cnt = cnt + 1
if d == 5:
break
范围(1000)内的i的:
d=randint()
如果d 5:
cnt=cnt+1
如果d==5:
打破
这应该可以:
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
假设5是您期望的数字:
sum(1 for _ in iter(lambda: randint(0, 9), 5))
如果要包含最后一个数字,可以添加1
说明:
返回一个迭代器,该迭代器调用iter(function,val)
直到 返回函数
val
是返回lambda:randint(0,9)
的函数(可以调用)randint(0,9)
计算迭代器的长度sum(1表示uin迭代器)
- 如果希望循环一直持续到停止,请使用
循环,而不是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的迭代,只需使用
itertools从1开始计数。计数(1)
如果OP仍在与循环作斗争,我认为生成器表达式和匿名函数实际上不在OP的掌握范围之内。“uuu”的含义是什么?它只是一个变量,您可以根据需要重命名它。请参阅我编辑的答案。第二个答案(列表()one)不是很好,因为在遇到所需的值之前,您可能正在构建一个非常大的列表,并且它可能会占用大量内存。+1为简洁起见。但是您对randint的呼叫应该是(0,9)而不是(0,10)。Randint包括两个端点。如果假设您的答案(与OP自己的代码一样)要计算生成的随机整数的数量,则答案将被关闭一个。
在python 3之前的版本中使用,并由解析器替换为=代码>@Sp:谢谢,我从来不知道。我以为这只是针对2.6之前的版本。你可以从一个概率为0.1的样本中抽取一次,而不是模拟。
import random, itertools
for count in itertools.count():
if random.randint(0, 9) == 5:
break
from random import randint
count = 0
while randint(0, 9) != 5:
count += 1