-2

次のコードで予期しない出力が発生しています。

import random

N = 30  # number of steps

n = random.random()  # generate a random number

x = 0
y = 0
z = 0
count = 0 
while count <= N:

if n < 1/3:
    x = x + 1           # move east
    n = random.random() # generate a new random number

if n >= 1/3 and n < 2/3:
    y = y + 1           # move north
    n = random.random() # generate a new random number

if n >= 2/3:
    z = z + 1           # move up
    n = random.random() # generate a new random number


print("(%d,%d,%d)" % (x,y,z))
count = count + 1

コードを実行すると、問題は次のとおりです。

  • コード出力は、ステップ数(N)変数より 1 つ多く、31 座標を表示します。
  • 1 ステップの各反復は 1 ステップしか実行できませんが、複数のステップが必要になる場合があります。

コードをテストしたところ、問題が確認されました。コードをテストするために、N = 1 を割り当てたところ、次の出力が表示されました。

  • (-1,0,1) これは最初のステップのはずですが、複数のステップ (x-1 と z+1 の両方) が必要でした。

  • (-2,0,1) ステップ変数の数 (N) = 1 ですが、これは 2 番目の出力ですが、なぜ表示されたのですか? 助けてくれてありがとう

4

2 に答える 2

3
  1. N は 30 なので、count は 0 から 30 になります。30 <= 30 なので、count=0、1、...、29 AND 30 のループを実行します。これは 31 回です。

  2. 一歩を踏み出すとき、次の一歩が踏み出されないという保証はありません。ランダムに発生した場合、同じループ反復で前のループに既に入っている場合は、2 番目または 3 番目に入ることができます。

于 2016-09-20T07:07:14.963 に答える
-1

別の int になるだけの 2 つの int を分割しています。したがって、基本的にコードは次のようになります。

if n < 0:
    x = x + 1           # move east
    n = random.random() # generate a new random number

if n >= 0 and n < 1:
    y = y + 1           # move north
    n = random.random() # generate a new random number

if n >= 1:
    z = z + 1           # move up
    n = random.random()

各if行を浮動小数点数を含むように変更して修正

if n < 1.0/3
于 2016-09-20T07:07:49.507 に答える