2

私は自分のコードでジレンマを抱えています。最初に、次のことを達成するために書かなければならなかった演習がありました

エクササイズ

この演習を完了するためにファイルを作成します。100 個の乱数 (1 ~ 1000 の範囲) を生成し、それらの乱数のうち偶数と奇数の数をカウントするプログラムを作成してください。以下の出力例のように、結果を画面に表示します。ヒント: while ループを使用して 100 回ループします。

私の結果:

import random
num = 0
odd = 0
even = 0

while num < 100:
    random.randint(1,1000)
    num = num + 1
    #print(num)
    if random.randint(1,1000)%2==0:
        even = even + 1
    else:
        odd = odd + 1

print ("Out of 100 Random Numbers,",even,"were even and",odd,"were Odd")

出力:

Out of 100 Random Numbers, 50 were even and 50 were Odd

オールグレービー!!

次のアクティビティ:

a の部分を 10 回繰り返す while ループをもう 1 つ追加します。以下の出力例のように、結果を画面に表示します。

このような出力で:

Out of 100 random numbers, 56 were odd, and 44 were even.
Out of 100 random numbers, 60 were odd, and 40 were even.
Out of 100 random numbers, 47 were odd, and 53 were even.
Out of 100 random numbers, 54 were odd, and 46 were even.
Out of 100 random numbers, 48 were odd, and 52 were even.
Out of 100 random numbers, 53 were odd, and 47 were even.
Out of 100 random numbers, 46 were odd, and 54 were even.
Out of 100 random numbers, 52 were odd, and 48 were even.
Out of 100 random numbers, 53 were odd, and 47 were even.

だから私は書いた:

import random
num = 0
odd = 0
even = 0
loop = 0


while loop < 10:
    loop = loop +1

    while num < 100:
        num = num + 1
        rand = random.randint(1,1000)
        #print(num)
        if rand%2==0:
            even = even + 1
        else:
            odd = odd + 1
    result = print ("Out of 100 Random Numbers,",even,"were even and",odd,"were Odd")

出力結果:

Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd

優れたプログラマーの 1 人が、なぜ私がその結果を得ているのか、および/または演習で期待される結果を得るためにコードを変更したのかを説明してもらえますか?

彼らが言うことを知っているので、なぜそれが機能しないのか、そしてそれを修正する方法の説明が望ましいでしょう。

御時間ありがとうございます。

4

6 に答える 6

3

この方法でコードを更新してみてください (num、odd、even の初期化を top while 内に移動します):

from random import randint

loop = 0

while loop < 10:
    num = 0
    odd = 0
    even = 0
    loop += 1

    while num < 100:
        num += 1
        rand = randint(1, 1000)
        if rand % 2 == 0:
            even += 1
        else:
            odd += 1
    print "Out of 100 Random Numbers, {0} where even and {1} where Odd".format(even, odd)
于 2013-03-28T10:02:27.950 に答える
0

(ループを開始する前に) 外側の while ループ内でnum(および and もeven)の値をリセットするのを忘れました。2 回目は、num が既に 100 であるため、内側のループを実行したり、乱数を計算したりする必要はまったくありません。oddwhile num < 100

于 2013-03-28T10:03:17.593 に答える
0

最初の while ループの開始時に , , を 0 とodd宣言evenするだけです。 そうすれば、これらの変数を毎回リセットして、必要な出力を得ることができます。num

あなたはで終わるはずです

while loop < 10:
    loop = loop +1
    num = even = odd = 0 # here
    while num < 100:
        num = num + 1
        rand = random.randint(1,1000)
        #print(num)
        if rand % 2 == 0:
            even = even + 1
        else:
            odd = odd + 1
        # grammar
     print ("Out of 100 Random Numbers,",even,"were even and",odd,"were Odd")

生成された数値の総数を出力する別のバージョン

loop = 0
even = odd = 0 # change 1
while loop < 10:
    loop = loop +1
    num = 0 # change 2
    while num < 100:
        num = num + 1
        rand = random.randint(1,1000)
        #print(num)
        if rand % 2 == 0:
            even = even + 1
        else:
            odd = odd + 1
        # grammar
    print ("Out of", loop*100,"Random Numbers,",even,"were even and",odd,"were Odd")
于 2013-03-28T10:05:07.480 に答える
0

以下を外側のループ内に移動する必要があります。

num = 0
odd = 0
even = 0

それ以外の場合、内側のループの 2 回目以降の反復は事実上 no-op になります。

于 2013-03-28T10:02:09.107 に答える
0

内部ループの各パスの後、カウンターをリセットしません。したがって、1 回目は、100 になるまで、その実行のオッズと偶数をカウントしますnum。2 回目は、while ループの開始に到達すると、値をチェックしますnumすでに100 であるため、決してループに入り、前回からのカウントを出力するだけです。

したがって、それを修正する1つの方法は、の設定を移動し、外側のループ内に移動するnumことoddですeven

そうは言っても、ここで while ループを使用するのは少し奇妙です。実際には、この目的にははるかに優れた for ループを検討する必要があります。

于 2013-03-28T10:02:55.153 に答える
0

while ループの終了後の変数num=100なので、外側の while ループで num=0 をリセットする必要があります

于 2013-03-28T10:06:36.153 に答える