2017-08-17 7 views
-3

whileループを壊すのに問題があります。私は、ウィンドウの端に達するまで、始点から円を移動しようとしています。私はそれを動かすことができますが、それは動くのを止めません。私は、ループの異なる種類を試してみました、とさえ休憩を追加するが、それはまだ壊れていないだろうしました:/python while whileループを固定しました

from time import * 
from graphics import * 
from random import * 
win = GraphWin("My Program", 500,400) 

def MoveRight(circle): 
    circle_center = circle.getCenter() 
    center_x = circle_center.getX() 
    center_y = circle_center.getY() 
    circle.draw(win) 
    for center_x in range(center_x, 450): 
     circle.move(10,0) 
     sleep(.15) 
    circle_center = circle.getCenter() 

my_circle = Circle(Point(200,50), 20) 
my_circle.setFill("blue") 
MoveRight(my_circle) 

をEDIT: は、この問題は解決されています!

+0

どのwhile whileループですか?注:おそらく、複数のモジュールから 'from ... import *'を実行することは決して良い考えではありません。 – MSeifert

+0

'for'ループは250回実行されます(' center_x'は200から450までの値を取る)が、各ステップで10ピクセル移動して合計2500ピクセルの瞬間をします。言い換えれば、 'center_x'はもはや最初のステップの後の円の位置を表していません。 'circle.move(1、0)'を使った方が、もっとうまく動作するかもしれません。 – jasonharper

答えて

2

円の中心が200 x軸にあると思います。そしてラインで

for center_x in range(center_x, 450): 

center_xが200に等しい、200(center_x)と450の間の範囲は、250回実行するforループそしてこの250
あります。

だから、コード

circle.move(10,0) 
sleep(.15) 

の残りは250回runnedています。だから、250ステップ10ステップ、2500ステップ!

あなたの問題を解決するには、あなたがこれを行う必要があります。

while center_x != 450: 
    circle.move(10, 0) 
    center_x += 10 # Added this 
    sleep(.15) 

EDIT: 私はcenter_xを更新するのを忘れてし...

(円がで停止しないことに注意してくださいエッジは450で停止します。
エッジが450の場合は動作します。)

(このサークルの中心は450で止まりません。 )

+0

私はそれを試みたが、それはまだ止まっていなかった。それから私はcenter_xを更新していないことに気付きました。一度私がそれをしたら、すべてが働いた。どうもありがとう! –

+0

@RebeccaPhillips解決策としてあなたの答えを記入できますか? – Zcode