在这种情况下,if 代码块如何从 while 循环停止的地方继续?



我根本没有编码经验,我刚刚开始学习Python。

在John Guttag的书"使用Python with Application to Understanding Data的计算和编程简介"中,在第3章的开头,有一个代码示例:

#Find the cube root of a perfect cube
x = int(input('Enter an integer: '))
ans = 0
while ans**3 < abs(x):
ans = ans + 1
if ans**3 != abs(x):
print(x, 'is not a perfect cube')
else:
if x < 0:
ans = -ans
print('Cube root of ' + str(x) + ' is ' + str(ans))

我很难理解的是,"while"之外的"如果"如何从迭代中循环中断的地方继续?如果是因为 ans 的最后一次迭代使其脱离循环并满足 if 条件,那么 if 条件如何适用于循环内的 ans 和 x 的值?(ans^3 不等于 x 仅在 while 循环内,这部分怎么能工作:

if ans**3 != abs(x):
print(x, 'is not a perfect cube')

我真的不知道该怎么问这个问题,但这是我在偷看书中的代码之前想出的代码,它有效,也许它有助于澄清我到底在问什么:

x=int(input('Enter an integer: '))
crx=0
while True:
if crx**3<abs(x):
crx=crx+1
elif crx**3==x:
print('The cube root of',x,'is',str(crx)+'.')
break
elif crx**3==-x:
print('The cube root of',x,'is',str(-crx)+'.')
break
else:
print(x,'is not a perfect cube.')
break

在我的脑海中,不知何故,我不得不在 while 循环中插入 if 代码块......

提前谢谢你。

这不是if回到while循环的结果。让我们检查一下控制流:

x 被设置为字符串input中的整数

ans初始化为值0,一个int

x = int(input('Enter an integer: '))
ans = 0

为了检查某物是否有立方根,while 循环获取每个大于0的整数并将其立方体化,如果立方体小于x,那么我们将ans增加1,否则,保存ans并且while循环退出。请注意,否则覆盖立方体是否大于或等于x

while ans**3 < abs(x):
ans = ans + 1

如果得到的ans等于x,则x有一个立方根。如果不是,则x不是立方根。

if ans**3 != abs(x):
print(x, 'is not a perfect cube')
else:
if x < 0:
ans = -ans
print('Cube root of ' + str(x) + ' is ' + str(ans))

简单来说 - 循环确保ans的值是立方体大于或等于x的最低(非负(整数。请注意以下后果:

  • 如果x是一个完美的立方体,那么ans的最终值将恰好是该立方根(因为我们知道ans**3必须等于x
  • 如果 x 不是一个完美的立方体,那么ans的最终值必须使得ans**3严格大于x。特别是,它不会等于它。

因此,计算纯粹是在while循环中完成的 - 在此之后,if检查您是否计算了确切的立方根,或者您是否没有(在这种情况下,这是不可能的,因为x不是一个完美的立方体(。当然,在任何一种情况下,它都会向用户打印适当的消息。

(我刚刚看到了使用您自己的解决方案进行的编辑 - 是的,正如您所观察到的,这也很好用。很少只有一种方法可以解决代码问题。

最新更新