2016-09-20 72 views
-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 

當運行該代碼,該問題是:

  • 代碼輸出顯示器31點的座標,比步數1以上(N )變量。
  • 1步驟的每次迭代應該只需要1步,但有時需要多個步驟。

當我測試代碼時,問題得到了保證。要測試的代碼,我分配N = 1,看見下面的輸出:

  • (-1,0,1)這應該是初始步驟,但它採取多個步驟(包括X-1和z + 1),這怎麼會發生?

  • (-2,0,1)步進變量數(N)= 1但是這是第二個輸出,爲什麼顯示? 感謝您的幫助

+1

你逐行調試器會回答這一切與沉着。 – Bathsheba

+4

http://stackoverflow.com/questions/39587461/random-walks-weird-outcome-in-python-3你的代碼看起來很相似,這可能是爲一組學生留下的一些任務嗎?只是問,因爲這幾分鐘前剛發佈。 –

回答

3
  1. N是30,所以計數從0到30,因爲30 < = 30將運行迴路數= 0,1,...,29和30這是31倍

  2. 當你採取措施時,你不確保不採取另一個步驟。如果隨機發生的,你可以如果前一個已經是在同一個循環迭代

-1

您將兩個整數這隻會造成另一個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 n < 1.0/3 
+0

劃分兩個整數只是Python 2中的一個整數。在Python 3中,整數之間的「真分度」(使用'/'運算符)給出了一個'float'。這個問題沒有用Python版本標記,但print函數調用使它看起來像Python 3。 – Blckknght