Warum liest Python die nächste Zeile nicht (wenn)?

Jan 18 2021

Ich habe das Programm über Pythagorean geschrieben. Ich habe meine Antwort erhalten, aber Python liest (break) nicht nach (if). Mein Programmtitel: (Spezielles pythagoreisches Triplett), es gibt eine Antwort, denn ((a+b+c=1000)&(a**2 + b**2 =c**2) )ich möchte ein b c finden. Ich weiß, (a=200, b=375, c=425)aber wenn das Programm startet, hört es nie auf und geht weiter. Es gibt auch das Produkt dieser drei Zahlen ein.

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

Antworten

2 Barmar Jan 18 2021 at 13:15

Die pythVariable ist nicht erforderlich . Sie können einfach return Trueoder verwenden return False.

Die ifAnweisung muss eingerückt sein, damit sie in der Schleife ist.

Sie müssen den Wert des Funktionsaufrufs testen.

Du brauchst nicht else: continue. Schleifen werden automatisch fortgesetzt, sofern Sie nicht aus ihnen ausbrechen. continuewird nur benötigt, wenn Sie den Rest des Schleifenkörpers überspringen und die nächste Iteration starten möchten. Es wird am Ende des Körpers nicht benötigt.

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