Python 嵌套 while 循环无法正常工作

Python nested while loop is not working correctly

我正在测试一个嵌套的 while 循环并 运行 解决了一些问题,想知道是否有人能发现我做错了什么。

while 循环应该继续打印 x,y 对,因为它朝着最终的 x 值努力。但是,输出不适用于嵌套循环。也就是说,它在达到某个值后不会更新 y 值。代码和示例输出如下所示:

IWX1 = 2317715.221
IWY1 = 796309.685
IWX2 = 2317743.658
IWY2 = 796346.704
IWX3 = 2317690.718
IWY3 = 796343.693
Q = 5

MWX1 = 2317704.666
MWY1 = 796321.216
Z1 = ((Q/ (2 * np.pi)) * (np.arctan((MWY1-IWY1)/(MWX1-IWX1))) + (Q/ (2 * np.pi)) * (np.arctan((MWY1-IWY2)/(MWX1-IWX2))) 
        + (Q/ (2 * np.pi)) * (np.arctan((MWY1-IWY3)/(MWX1-IWX3))))

X_t = IWX1 - 0.01
Y_t = IWY1
Z_t = 7

while abs((X_t - MWX1))>0.01:
    while abs(Z_t-Z1)>0.05:
        Z_t = ((Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY1)/(X_t-IWX1))) + (Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY2)/(X_t-IWX2))) 
        + (Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY3)/(X_t-IWX3))))
        Y_t += 0.01
    else:
        print(X_t,Y_t)
        X_t -= 0.01
Y_t += 0.01

示例输出:

2317715.211 796309.7250000001
2317715.2010000004 796309.7350000001
2317715.1910000006 796309.7450000001
2317715.181000001 796309.7550000001
2317715.171000001 796309.7650000001
2317715.1610000012 796309.7750000001
2317715.1510000015 796309.7850000001
2317715.1410000017 796309.7950000002
2317715.131000002 796309.8050000002
2317715.121000002 796309.8150000002
2317715.1110000024 796309.8250000002
2317715.1010000026 796309.8350000002
2317715.091000003 796309.8450000002
2317715.081000003 796309.8550000002
2317715.0710000033 796309.8650000002
2317715.0610000035 796309.8750000002
2317715.0510000037 796309.8850000002
2317715.041000004 796309.8950000003
2317715.031000004 796309.9050000003
2317715.0210000044 796309.9150000003
2317715.0110000046 796309.9250000003
2317715.001000005 796309.9350000003

.
.
.
.
2317704.6810002355 796320.2550000099

注意 Y 正在改变,但在计算 Z 值时它不符合退出内部 while 循环所需的条件。

编辑 - 我在内部循环之外添加了 Y-t += 0.01 我认为这解决了问题但它没有,它不再试图满足内部循环 - 有人可以告诉我如何解决它所以继续 运行 内部循环直到满足外部循环?

最终编辑 - 如果我在第一个 while 循环之外添加了 Z_t 计算,那么由于 Khaled 发布的答案,它起作用了。见下文:

IWX1 = 2317715.221
IWY1 = 796309.685
IWX2 = 2317743.658
IWY2 = 796346.704
IWX3 = 2317690.718
IWY3 = 796343.693
Q = 5

MWX1 = 2317704.666
MWY1 = 796321.216
Z1 = ((Q/ (2 * np.pi)) * (np.arctan((MWY1-IWY1)/(MWX1-IWX1))) + (Q/ (2 * np.pi)) * (np.arctan((MWY1-IWY2)/(MWX1-IWX2))) 
        + (Q/ (2 * np.pi)) * (np.arctan((MWY1-IWY3)/(MWX1-IWX3))))

X_t = IWX1 - 0.01
Y_t = IWY1
Z_t = 7

while abs((X_t - MWX1))>0.01:
    while abs(Z_t-Z1)>0.05:
        Z_t = ((Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY1)/(X_t-IWX1))) + (Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY2)/(X_t-IWX2))) 
        + (Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY3)/(X_t-IWX3))))
        Y_t += 0.01
    else:
        print(X_t,Y_t)
        X_t -= 0.01
        Z_t = ((Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY1)/(X_t-IWX1))) + (Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY2)/(X_t-IWX2))) 
        + (Q/ (2 * np.pi)) * (np.arctan((Y_t-IWY3)/(X_t-IWX3))))
        Y_t += 0.01


如果您查看您的代码,一旦满足内部 while 循环条件一次,您就不会 changing/resetting Z_t 或 Z1 的值。因此,在后面的循环中,条件已经满足,y值不会改变,只有x会改变。