2014-11-02 94 views
2

我正在研究一個簡單的python程序,它涉及到創建一個圓圈「按鈕」,然後讓用戶在圓圈內單擊。如果他們沒有點擊該圈子,則會顯示一條消息,指出他們已經在圈子外點擊並應該再試一次。但是,在最後一部分,儘管使用了中斷,但我仍然在代碼中獲得了無限循環。有什麼方法可以幫助人們查看是否有錯誤?謝謝!停止Python中的無限循環雖然語句

r = 75 

while True: 
    # to determine if click is within circle 
    length = math.sqrt(((x-100)**2) +((y-250)**2)) 
    if length == r or length < r: 
     break 
    # prints if user does not click within the range 
    print("Please click within the spin button") 
+0

當我使用長度的數值時,代碼對我來說工作正常,看看您得到的x和y座標是否正確以及您使用的公式。 – 2014-11-02 06:20:16

回答

1

xy從不在while環路內更新,這樣,如果他們在第一次迭代你的圈子之外,length將始終保持在相同的值(大於r),以及break語句永遠不會被執行。

另外,使用if length >= r:。無需分別檢查兩個條件。 (從邏輯上講,它應該是if length > r:,因爲點擊圓的邊緣仍然應該計數。)

+0

非常感謝!這工作! – Kara 2014-11-02 17:47:16

0

如果您想對點擊做出反應,您通常會使用某種GUI框架,TKinter,GTK,QT, wx類似的東西或圍繞PythonCard的封裝。用你可以連接一個事件,比如點擊一個元素到一個應該包含你的代碼的方法。這樣,代碼不會在循環中運行,而只會在點擊發生時運行。 實際的代碼很大程度上取決於您選擇的GUI框架,但您並未提供任何有關該信息的信息。

-1
r = 75 
while True: 
    # to determine if click is within circle 
    length = math.sqrt(((x-100)**2) +((y-250)**2)) 
    if length == r or length < r: 
     break 
    else: 
    # prints if user does not click within the range 
    print("Please click within the spin button") 

您的代碼是正確的,只需要其他語句。 else語句在if語句爲false時運行。 所以在這裏假設如果語句是正確的,那麼代碼將會中斷,但是如果語句爲false,代碼將轉到else語句並打印請點擊旋轉按鈕。

謝謝。

+1

這個答案只是沒有任何解釋的代碼。 – BDL 2014-12-12 21:27:20