n=int(input("Enter a Number: "))
x=0
y=0
z=0
while(n>0):
x=n%10
y=x**3
z=z+y
n=n//10
print (z)
#The z here is the same value which I enter, yet it doesn't work.
#If I enter 407 as n, z becomes (4^3)+(0^3)+(7^3) which is 407
if (z==n):
#But even when 407==407, it just wont print the bottom statement
print ("The number is Armstrong")
else:
print ("The number isn't Armstrong")
#it prints that it isn't an Armstrong number
答案 0 :(得分:1)
在while
循环之后,n
已经成为4//10
的{{1}},因此它永远不会等于0
的407。
您将需要保留原始输入的副本以进行比较。
作为一般建议,请使用调试器或至少z
个对象来查看分配在哪里出错。
答案 1 :(得分:1)
不使用任何内置方法
阿姆斯壮编号为371
,因为3**3 + 7**3 + 1**3 = 371
。根据此规则123
不是阿姆斯特朗数,因为1**3 + 2**3 + 3**3 is not equal to 123
def count_digit(n):
count = 0
while n > 0:
count += 1
n //= 10
return count
def is_armstrong(n):
given = n
result = 0
digit = count_digit(n)
while n > 0:
reminder = n % 10
result += reminder ** digit
n //= 10
return given == result
is_armstrong(371)
>> True
is_armstrong(123)
>> False
答案 2 :(得分:0)
定义:如果将n
中每个数字的总和乘以n
中总数字的幂,则数字n
是Armstrong number 1}}。
跟踪原始数字n
非常重要,因为需要将其与n
(您的变量代表总和)的结果进行比较。由于您要在z
循环中对n
进行突变,因此没有理由将其与原始输入进行比较,因此while
的运行效果并不理想。将if (z==n):
保存为另一个变量n
,然后将其减小为0。
此外,您的代码已任意选择3作为数字中的数字。为了使您的功能可以正确使用任何数字,您需要一种计数其位数的方法。一种方法是将数字转换为字符串并采用长度。
我强烈建议您使用描述性变量名,以减少混淆自己和他人的机会。显然,original
代表您的总和,z
代表您的余数,这是通过阅读代码来实现的。如果代码变得更长或更复杂,那么理解就可能是一场噩梦。
最后,从样式的角度来看,Python并不是一种特别灵活的语言。我建议尽可能坚持使用style guide,以保持代码可读性。
这是一个可行的示例:
x
输出:
def armstrong(n):
total = 0
original = n
digits = len(str(abs(n)))
while n > 0:
remainder = n % 10
total = total + remainder ** digits
n = n // 10
return total == original
if __name__ == "__main__":
while 1:
print(armstrong(int(input("Enter a Number: "))))
答案 3 :(得分:0)
您可以将初始数字作为字符串输入,以便我们更轻松地将其转换为列表。然后,我们可以map
创建ints
的列表。之后,我们可以使用列表推导将列表中的所有int
提升为列表中len
的幂。如果此列表中的sum
等于我们的输入,则我们有一个Armstrong编号。
n = input('Enter a number: ')
nums = list(map(int, n))
raised = [i**len(nums) for i in nums]
if sum(raised) == int(n):
print('The number is Armstrong')
else:
print('The number is not Armstrong')
扩展列表理解:
raised = []
for i in nums:
i = i**len(nums)
raised.append(i)
print(raised)
替代map
:
nums = []
for i in n:
i = int(i)
nums.append(int(i))
答案 4 :(得分:0)
我更正了您的代码:
if(\Illuminate\Support\Facades\Auth::check()) {
return abort(404);
}
#Rest of the code is for guest user.....
#
但是您仍然可以在许多方面做得更好。查看vash_the_stampede和ggorlen的代码。
或者:
const permutations = array => {
let permut = [];
helperFunction(0, array, permut);
return permut;
};
const helperFunction = (i, array, permut) => {
if (i === array.length - 1) {
permut.push(array.slice());
} else {
for (let j = i; j < array.length; j++) {
swapElements(i, j, array);
helperFunction(i + 1, array, permut);
swapElements(i, j, array);
}
}
};
function swapElements(a, b, array) {
let temp = array[a];
array[a] = array[b];
array[b] = temp;
}
console.log(permutations([1, 2, 3]));
答案 5 :(得分:0)
total=0
def Armstrong(n):
m=list(n)
global total
for i in m:
total+=pow(int(i),len(n))
if total==int(n):
print ("it is Armstrong number")
else:
print("it is not Armstrong number")
Armstrong(input("enter your number"))
print(total)