4

假设我反复生成 0-9 的随机整数,直到出现给定的数字。我需要的是一个函数,它计算在这种情况发生之前生成了多少整数。请帮我解决一下这个。

这是我尝试过的,我放了 1000,因为它足够大,但我认为它不正确,因为我的数字可以在 1000 次迭代后出现。

for i in range(1000):
  d = randint()
  if d <> 5:
     cnt = cnt + 1
  if d == 5:
     break
4

5 回答 5

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)计算迭代器的长度。
于 2013-09-02T01:06:06.110 回答
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)

将其转换为函数留给读者作为练习。

于 2013-09-02T01:06:34.003 回答
2

itertools.count通常比使用带有显式计数器的 while 循环更整洁

import random, itertools

for count in itertools.count():
    if random.randint(0, 9) == 5:
        break

如果您希望计数包括生成 5 的迭代,只需使用 1 从 1 开始计数 itertools.count(1)

于 2013-09-02T02:16:24.403 回答
1
from random import randint
count = 0
while randint(0, 9) != 5:
   count += 1
于 2013-09-02T04:06:59.947 回答
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
于 2013-09-02T01:05:55.967 回答