2014-11-02 3 views
2

나는 원형 "버튼"을 만들고 사용자가 원을 클릭하게하는 간단한 파이썬 프로그램을 만들고있다. 서클을 클릭하지 않으면 서클 외부를 클릭했음을 알리는 메시지가 나타나 다시 시도해야합니다. 그러나 마지막 부분에서는 중단 점을 사용함에도 불구하고 코드에 대해 무한 루프가 발생합니다. 오류가 있는지 누구든지 볼 수있는 방법이 있습니까? 감사!파이썬에서 무한 루프를 멈추는 동안 Statement

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 좌표가 올바른지, 사용한 수식이 맞는지 확인하십시오. –

답변

1

xywhile 루프 내에 업데이트되지 않습니다, 그래서 그들은 첫 번째 반복에서 원의 외부에있는 경우, length 항상 같은 값 (보다 큰 r)에서 유지됩니다, 그리고 break 문 것이다 결코 처형되지 않는다.

또한 if length >= r:을 사용하십시오. 별도로 두 가지 조건을 점검 할 필요가 없습니다. (논리적으로 원의 가장자리를 클릭하면 카운트되어야하기 때문에 if length > r:이어야합니다.)

+0

정말 고마워요! 그게 효과가 있었어! – Kara

0

클릭에 반응하려면 일반적으로 일종의 GUI 프레임 워크, TKinter, GTK, QT 등을 사용합니다. 비슷한 wx 또는 파이썬 카드 주위 래퍼. With를 사용하면 코드를 포함해야하는 요소에 대한 클릭과 같은 이벤트를 연결할 수 있습니다. 이 방법은 코드가 루프에서 실행되지 않고 클릭이 발생할 때만 실행됩니다. 실제 코드는 선택한 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 문 만 필요합니다. else 문은 if 문이 거짓 일 때 실행됩니다. 그래서 여기에 문장이 맞다면 코드가 깨지 겠지만, if 문이 false이면 코드는 else 문으로 넘어 가서 인쇄 할 것입니다. 스핀 버튼을 클릭하십시오.

감사합니다.

+1

이 답변은 설명이없는 코드 일뿐입니다. – BDL