【发布时间】:2022-01-20 02:26:41
【问题描述】:
我正在测试一个嵌套的 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 calc,那么由于 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
【问题讨论】:
-
我只是得到一个错误,
MWY2没有定义。内部while循环取决于Z1,它取决于MWY2的缺失值……所以这很难提供帮助,但我的直觉是内部while循环永远不会运行,因为条件不满足。 -
else:块的意义何在?这仅在循环可以用break结束时才有用,因为它区分正常结束或中断。 -
@Mark 抱歉,我有问题,你现在应该可以测试了。
标签: python while-loop nested-loops