Python 堆叠和嵌套的if-else语句不移动到下一个if

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 =

我一直在搜索堆叠/嵌套的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 = 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或整数。或者使用lower
tol
你可以缩短你的间歇时间。感谢哈迪,它完美地解决了这个问题,所有的ifs和ELSE似乎都运行良好:)非常感谢(仅供参考,我只是想为了好玩而学习,这不是家庭作业。)