Python 堆叠和嵌套的if-else语句不移动到下一个if
我一直在搜索堆叠/嵌套的if-else语句,但elif语句似乎无法满足我的需要。 其目的是打印所有偶数、方数和立方体数,并突出显示哪些是正方形和立方体。 这是我的代码:Python 堆叠和嵌套的if-else语句不移动到下一个if,python,python-3.x,if-statement,nested,Python,Python 3.x,If Statement,Nested,我一直在搜索堆叠/嵌套的if-else语句,但elif语句似乎无法满足我的需要。 其目的是打印所有偶数、方数和立方体数,并突出显示哪些是正方形和立方体。 这是我的代码: import math rn = 0 for n in range(1,100,1): if rn is 0: if n%2 is 0: print(n, " is an even number") else: rn =
import math
rn = 0
for n in range(1,100,1):
if rn is 0:
if n%2 is 0:
print(n, " is an even number")
else:
rn = 1
if math.sqrt(n) is int:
print(n, " is a square number")
if n**(1/3) is int:
print(n, " is a Cube number too")
continue
else:
print(n, "is only a square number")
continue
else:
rn = 1
if rn is 1:
if n**(1/3) is int:
print(n, " is a Cube only number")
else:
rn = 0
continue
在递增n之前,代码不会转到下一个if语句
输出:
2 is an even number
4 is an even number
6 is an even number
是否有其他方法可以继续或中断,但保持在同一个循环中?
提前谢谢
import math
rn = 0
d=0.
for n in range(1,100,1):
if rn is 0:
if n%2 is 0:
print(n, " is an even number")
else:
rn = 1
if math.sqrt(d).is_integer():
print(n, " is a square number")
if float(n**(1-3)).is_integer():
print(n, " is a Cube number too")
continue
else:
print(n, "is only a square number")
continue
else:
rn = 1
if rn is 1:
if n**(1-3) is int:
print(n, " is a Cube only number")
else:
rn = 0
continue
使用
float.is_integer()
,这将起作用,以前的问题是is int
对任何输入返回False
。还请注意,这将为从1到100的所有数字提供>{}是一个平方数
,因为您正在进行数学。sqrt(d)
和d
是0
,因此如果n%2是0,则平方根始终是整数0:print(n,“是偶数”)else:rn=1,如果math.sqrt(d)是int:
这段代码导致了它。这是因为在调用else之后,将永远不会执行下一个if语句。您首先告诉计算机,如果n%2为0,则执行以下操作:
。之后,你告诉它,如果不是,就做些别的事情。然后它得到另一个if,但它已经在else中返回了答案。如果math.sqrt(d)是int:,那么的预期用途是什么?另外,您应该使用=
来测试相等性,而不是是
,但我不确定这行应该检查什么。你想检查一个整数吗?@roganjosh,是的,我正在检查一个整数,当我搜索如何执行上面提到的语句时,我使用的格式是最佳做法。@chromaerror我理解这一点,因此我要求解决这个问题。你有吗?n**(1-3)
与n**(-2)
相同,因此没有立方根there@AzatIbrakov他的代码有很多错误,无论是在if语句逻辑还是变量用法和语法方面。但他的问题是:如果n%2为0,那么之后的其余if-语句为什么不起作用。我的回答是因为如果他的陈述毫无意义,其余的他可以自己解决。我不是来完成他的家庭作业的。另外,我认为他本想写n**(1/3)
,但错误地写了-
而不是/
。是的,有一些打字错误和以前调试尝试的记忆,仍然存在,这增加了错误,d被删除并设置回n,和-已被/取代,虽然此代码现在大部分功能正常,但它不会返回,64作为一个立方体数,但仅为平方???@StefanPAuckland,因为float(64**(1/3))
打印3.9999999999999999996
,这不是算法逻辑的问题,而是计算机精度和局限性的问题。尝试添加一个过滤器,比如说tol=1e-5
,如果math.floor(n**(1-3)-tol)!=math.floor(n**(1-3)+tol):
这意味着从3.999991到4.00002的任何值都将计为4或整数。或者使用lowertol
你可以缩短你的间歇时间。感谢哈迪,它完美地解决了这个问题,所有的ifs和ELSE似乎都运行良好:)非常感谢(仅供参考,我只是想为了好玩而学习,这不是家庭作业。)