ทำไม Python ไม่อ่านบรรทัดถัดไป (ถ้า)

Jan 18 2021

ฉันเขียนโปรแกรมเกี่ยวกับ Pythagorean ฉันได้รับคำตอบ แต่ python ไม่อ่าน (แตก) หลังจาก (if) ชื่อโปรแกรมของฉัน: (Special Pythagorean triplet) มีคำตอบหนึ่งอยู่สำหรับ((a+b+c=1000)&(a**2 + b**2 =c**2) )ฉันต้องการหา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