Tại sao Python không đọc dòng tiếp theo (nếu)?

Jan 18 2021

Tôi đã viết chương trình về Pythagorean Tôi đã nhận được câu trả lời của mình nhưng python không đọc (ngắt) sau (nếu). Tên chương trình của tôi: (Bộ ba Pitago đặc biệt), có một câu trả lời tồn tại cho ((a+b+c=1000)&(a**2 + b**2 =c**2) )tôi muốn tìm a b c. Tôi biết (a=200, b=375, c=425)nhưng khi chương trình bắt đầu, nó không bao giờ dừng lại và nó vẫn tiếp tục. Nó cũng loại sản phẩm của ba số này.

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

Trả lời

2 Barmar Jan 18 2021 at 13:15

Không cần pythbiến. Bạn chỉ có thể sử dụng return Truehoặc return False.

Câu iflệnh cần được thụt lề để nó nằm trong vòng lặp.

Bạn cần kiểm tra giá trị của lời gọi hàm.

Bạn không cần else: continue. Các vòng lặp tự động tiếp tục trừ khi bạn thoát ra khỏi chúng. continuechỉ cần thiết khi bạn muốn bỏ qua phần còn lại của thân vòng lặp và bắt đầu lần lặp tiếp theo; nó không cần thiết ở phần cuối của cơ thể.

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