Perché Python non legge la riga successiva (if)?

Jan 18 2021

Ho scritto il programma su Pythagorean, ho ricevuto la mia risposta ma Python non legge (si interrompe) dopo (se). Il titolo del mio programma: (tripletta pitagorica speciale), esiste una sola risposta perché ((a+b+c=1000)&(a**2 + b**2 =c**2) )voglio trovare una b c. Lo so, (a=200, b=375, c=425)ma quando il programma si avvia non si ferma mai e continua. Inoltre digita il prodotto di questi tre numeri.

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

Risposte

2 Barmar Jan 18 2021 at 13:15

Non è necessaria la pythvariabile. Puoi semplicemente usare return Trueo return False.

L' ifistruzione deve essere indentata, quindi è nel ciclo.

È necessario testare il valore della chiamata di funzione.

Non hai bisogno else: continue. I loop continuano automaticamente a meno che tu non li interrompa. continueè necessario solo quando si desidera saltare il resto del corpo del ciclo e avviare l'iterazione successiva; non è necessario alla fine del corpo.

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