2017-11-11 6 views
0

私は、一般的にはPython言語とプログラミングにかなり慣れています。私はランダムウォーキングシナリオを作成しました。シナリオは特定の回数だけランダムな方向に1ステップ進んでいます。私が走ったことの1つは、私が設定したグラフィックウィンドウから時々消えてしまい、どこにいるのか見えなくなってしまうことです。 、私の質問があるランダムウォークシナリオをグラフィックスウィンドウの外に出ないようにする方法

from random import * 
from graphics import * 
from math import * 

def walker(): 
    win = GraphWin('Random Walk', 800, 800) 
    win.setCoords(-50, -50, 50, 50) 
    center = Point(0, 0) 
    x = center.getX() 
    y = center.getY() 

while True: 
    try: 
     steps = int(input('How many steps do you want to take? (Positive integer only) ')) 
     if steps > 0: 
      break 
     else: 
      print('Please enter a positive number') 
    except ValueError: 
     print('ERROR... Try again') 

for i in range(steps): 
    angle = random() * 2 * pi 
    newX = x + cos(angle) 
    newY = y + sin(angle) 
    newpoint = Point(newX, newY).draw(win) 
    Line(Point(x, y), newpoint).draw(win) 
    x = newX 
    y = newY 

walker() 

ウォーカーは、窓の外に行くことができないように、私はグラフィックウィンドウでパラメータを設定することができます方法はあります:ここで は、コードのですか?そうしようとすると、それはただ回り、別の方向を試みるだろうか?

ありがとうございます!

答えて

0

xとyの上限と下限を定義してみてください。その後、次のものが境界に来るまでランダムな点を試し続けているwhileループを使用します。

from random import * 
from graphics import * 
from math import * 

def walker(): 
    win = GraphWin('Random Walk', 800, 800) 
    win.setCoords(-50, -50, 50, 50) 
    center = Point(0, 0) 
    x = center.getX() 
    y = center.getY() 

while True: 
    try: 
     steps = int(input('How many steps do you want to take? (Positive integer only) ')) 
     if steps > 0: 
      break 
     else: 
      print('Please enter a positive number') 
    except ValueError: 
     print('ERROR... Try again') 

# set upper and lower bounds for next point 
upper_X_bound = 50.0 
lower_X_bound = -50.0 
upper_Y_bound = 50.0 
lower_Y_bound = -50.0 
for i in range(steps): 
    point_drawn = 0 # initialize point not drawn yet 
    while point_drawn == 0: # do until point is drawn 
     drawpoint = 1 # assume in bounds 
     angle = random() * 2 * pi 
     newX = x + cos(angle) 
     newY = y + sin(angle) 
     if newX > upper_X_bound or newX < lower_X_bound: 
      drawpoint = 0 # do not draw, x out of bounds 
     if newY > upper_Y_bound or newY < lower_Y_bound: 
      drawpoint = 0 # do not draw, y out of bounds 
     if drawpoint == 1: # only draw points that are in bounds 
      newpoint = Point(newX, newY).draw(win) 
      Line(Point(x, y), newpoint).draw(win) 
      x = newX 
      y = newY 
      point_drawn = 1 # set this to exit while loop 

walker() 
関連する問題