HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Decide if number is Armstrong number

Submitted by: @import:stackexchange-codereview··
0
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.

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 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.