patternpythonMinor
Decide if number is Armstrong number
Viewed 0 times
armstrongnumberdecide
Problem
I just recently started reading the python.org documents and it looked like a really interesting language. Now, since Visual Studio 2017 supports Python, I decided to finally actually start learning it. My friend challenged me to write a program that checks if a number is an Armstrong number.
Now this is the first solution that I could come up with. As you can see, it converts the number to a string to determine the amount of digits, and then handle them individually. Is this the smartest way to do it, or can it be done without converting to a string? If not: Is there anything I can do to improve this code performance-wise?
import sys
def isArmstrong(number):
arr = str(number)
count = len(arr)
res = 0
for x in range(0, count):
res += int(arr[x]) ** count
return res == number
if len(sys.argv) > 1:
arg = sys.argv[1]
print(arg + " is an armstrong number: " + str(isArmstrong(int(arg))))
else:
print("No arguments passed! :-(");Now this is the first solution that I could come up with. As you can see, it converts the number to a string to determine the amount of digits, and then handle them individually. Is this the smartest way to do it, or can it be done without converting to a string? If not: Is there anything I can do to improve this code performance-wise?
Solution
By PEP 8, Python's official style guide, function names should generally be
The function would typically be written more elegantly using the
I don't recommend using
For the printout, I recommend using
lower_case_with_underscores. Also, the final semicolon should be omitted.The function would typically be written more elegantly using the
sum() builtin function, with a generator expression. (It's not any faster than your original code, though. Actually, a tiny bit slower.)I don't recommend using
arr as a variable name, since it's neither descriptive (what does the array represent?) nor accurate (it's actually a string).For the printout, I recommend using
str.format() or one of the other formatting mechanisms.import sys
def is_armstrong(number):
digits = str(number)
length = len(digits)
return number == sum(int(digit) ** length for digit in digits)
if len(sys.argv) > 1:
arg = int(sys.argv[1])
print('{} is an Armstrong number? {}'.format(arg, is_armstrong(arg)))
else:
print("No arguments passed! :-(")Code Snippets
import sys
def is_armstrong(number):
digits = str(number)
length = len(digits)
return number == sum(int(digit) ** length for digit in digits)
if len(sys.argv) > 1:
arg = int(sys.argv[1])
print('{} is an Armstrong number? {}'.format(arg, is_armstrong(arg)))
else:
print("No arguments passed! :-(")Context
StackExchange Code Review Q#147738, answer score: 7
Revisions (0)
No revisions yet.