仅当不满足等式时,如何打印语句?

Dus*_*him 4 python for-loop

我试图找到满足范围(-10,10)中哪些 x 和 y 值的方程,如果没有找到解决方案,我试图输出“无解决方案”。

但是,当尝试输出“无解决方案”时,无论是否满足 for 循环,我都会在它的每次迭代中得到“无解决方案”,最终输出“无解决方案”。

我无法弄清楚如何在没有解决方案的情况下添加我的打印语句。

这是我迄今为止所拥有的:

''' Read in first equation, ax + by = c '''
a = int(input())
b = int(input())
c = int(input())

''' Read in second equation, dx + ey = f '''
d = int(input())
e = int(input())
f = int(input())

for x in range(-10,10):
    for y in range(-10,10):
        if ((a*x) + (b*y)) == c and ((d*x) + (e*y)) == f:
            print(x, y)
            break
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 5

您可以将else子句与for循环一起使用。只有当 for 循环不被 a 中断时才会执行break

for i in range(3):
    print(i)
else:
    print('hello')
# prints:
0
1
2
hello

for i in range(3):
    print(i)
    if i==1:
        break
else:
    print('world')
# prints:
0
1
Run Code Online (Sandbox Code Playgroud)

请注意,world由于循环被break语句中断,因此未打印。

但是,因为您有2 个for 循环,所以您的break语句只会破坏最内层的循环。要中断两个循环,您可以使用一个标志来停止执行。

HALT = False
for x in range(-10,10):
    for y in range(-10,10):
        if ((a*x) + (b*y)) == c and ((d*x) + (e*y)) == f:
            print(x, y)
            HALT = True
            break
    if HALT:
        break
else:
    print('No solution')
Run Code Online (Sandbox Code Playgroud)

使用itertools.product,您可以省去内循环和HALT标志。

from itertools import product


for x, y in product(range(-10, 10), repeat=2):
    if ((a*x) + (b*y)) == c and ((d*x) + (e*y)) == f:
        print(x, y)
        break
else:
    print('No solution')
Run Code Online (Sandbox Code Playgroud)