python中丑陋的数字

python中丑陋的数字,python,Python,我面临这个问题:输入一个数字,如果它是一个只能被2,4,5和它们的幂整除的数字,则打印True。我是一个初学者,我不知道我的代码出了什么问题,它会产生错误的结果 n = int(input("n: ")) def ugly_number(n): while n % 2 != 0: n = n/2 while n % 3 != 0: n = n/3 while n % 5 != 0: n = n/5 if n == 1

我面临这个问题:输入一个数字,如果它是一个只能被2,4,5和它们的幂整除的数字,则打印True。我是一个初学者,我不知道我的代码出了什么问题,它会产生错误的结果

n = int(input("n: "))
def ugly_number(n):
    while n % 2 != 0:
        n = n/2
    while n % 3 != 0:
        n = n/3
    while n % 5 != 0:
        n = n/5
    if n == 1:
        return True
    else: return False
print(ugly_number(n))

当n%mod==0时,您必须执行
,而不是
!=0
,因为实际上你只是将任何不可分的数字分解为
0
,而不涉及任何可分的数字。

你的条件句是向后的。您需要尽可能多地将数字除以素数
2
3
5
,以获得剩余因子。如果结果因子不是
1
,则它必须具有其他基本因子

def ugly_number(n):
    while n % 2 == 0:
        n = n/2
    while n % 3 == 0:
        n = n/3
    while n % 5 == 0:
        n = n/5
    return n == 1

for number in range(1, 31):
    print(number, ugly_number(number))

你的条件不对。您必须在
n%i==0
(其中i是因子)时继续除法,直到
n%i!=0
。在问题陈述中,您提到了2、4和5,而您的程序使用了2、3和5,因此您需要检查您是否正确地跟踪了问题。另外,我建议您执行整数除法,并将商存储在
n
中,而不是使用
/
运算符

n = int(input("n: "))
def ugly_number(n):
    for i in [2,3,5]:
        while n % i == 0:
            n //= i
    return n==1
print(ugly_number(n))

您测试了什么导致输入错误(以及为什么错误)的奇数,它将永远循环。在第一个while语句中,
n%2
将不是0,因此它将是n的一半。n现在将是一个十进制数,它的模2永远不会是0,因此程序将陷入循环
n = int(input("n: "))
def ugly_number(n):
    for i in [2,3,5]:
        while n % i == 0:
            n //= i
    return n==1
print(ugly_number(n))