파이썬이 다음 줄을 읽지 않는 이유는 무엇입니까 (if)?

Jan 18 2021

나는 Pythagorean에 관한 프로그램을 썼다. 내 대답을 얻었지만 파이썬은 (if) 후에 읽지 않습니다. 내 프로그램 제목 : (Special Pythagorean triplet), ((a+b+c=1000)&(a**2 + b**2 =c**2) )I want a b c에 대한 답이 하나 있습니다 . 나는 알고 (a=200, b=375, c=425)있지만 프로그램이 시작되면 절대 멈추지 않고 계속됩니다. 또한이 세 숫자의 곱을 입력합니다.

import random as r
def pyth(b,d,c):
    pyth = None
    if b**2+c**2 == d**2 :
        pyth = True
        h=d*c*b
        print(h)
        return pyth
    if b**2+d**2==c**2 :
        pyth= True
        h=d*c*b
        print(h)
        return pyth
    if d**2 + c**2 == b**2:
        pyth =True
        h=d*c*b
        print(h) 
        return pyth
   else:
       pyth = False 
       return 

a = list(range (150,1000))
b=0
c=0
d=0
h = 0
for i  in range(0,10000000):
    b = r.choice(a)
    c = r.choice(a)
    d = 1000-b-c
    e = b+c+d
if e == 1000 :
    pyth(b,d,c)
if pyth == True:
    break
else:
    continue

답변

2 Barmar Jan 18 2021 at 13:15

pyth변수 가 필요하지 않습니다 . return True또는을 사용할 수 있습니다 return False.

if문은 루프에서 그래서 들여 쓰기 될 필요가있다.

함수 호출의 값을 테스트해야합니다.

당신은 필요하지 않습니다 else: continue. 루프를 벗어나지 않는 한 루프는 자동으로 계속됩니다. continue나머지 루프 본문을 건너 뛰고 다음 반복을 시작하려는 경우에만 필요합니다. 신체 끝에는 필요하지 않습니다.

import random as r

def pyth(b,d,c):
    if b**2+c**2 == d**2 :
        h=d*c*b
        print(h)
        return True
    if b**2+d**2==c**2 :
        h=d*c*b
        print(h)
        return True
    if d**2 + c**2 == b**2:
        h=d*c*b
        print(h) 
        return True
    else:
       return False

a = list(range (150,1000))

for i  in range(0,10000000):
    b = r.choice(a)
    c = r.choice(a)
    d = 1000-b-c
    e = b+c+d
    if e == 1000 and pyth(b,d,c)
        break