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 から開始します。 itertools.count(1)

于 2013-09-02T02:16:24.403 に答える
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 に答える