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