#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    6
    Rep Power
    0

    Python Program-Happy numbers


    Need help with this problem. Note: I have to use loops and nothing ahead. I dont understand where I would start and how I would do it

    There is a sequence obtained by summing the squares of the digits of a
    number repeatedly. If the sequence converges to 1 in fewer than 15 steps,
    this number is considered a happy number.

    A perfect number is a positive integer that is equal to the sum of its proper
    positive divisors (i.e. the sum of its positive divisors excluding the
    number itself).
    e.g. 6 is a perfect number because 1+2+3=6.
    A number is practical if it is neither happy nor perfect.
    Level 3: Make a program that allows the user to enter a number and it will tell them if the
    number entered is a happy number or not. The user should be able to keep entering numbers
    until -1 is entered to quit the program.
    Level 4: In addition to telling the user whether the number is happy, tell them if the number
    is perfect and if the number is practical.
  2. #2
  3. Contributing User
    Devshed Demi-God (4500 - 4999 posts)

    Join Date
    Aug 2011
    Posts
    4,837
    Rep Power
    480
    This program might help. You'd have to modify it a lot to submit for a grade. In the process you might learn some python. Before scrolling down, break your problem into small steps.

    1) Write a program that prompts for input and displays it. Run the program.

    2) On paper, write the steps you'd use to determine if a number is happy. Now translate your algorithm to python. Python doesn't work like a human brain. Where you recognize a symbol as both a digit character and a numeric value, python won't. (gawk treats values as numbers or strings depending on context. Very nice!) How can convert a number to it's digits? How do you square them? How will you sum these squares?

    3) Do likewise for perfect numbers. How will you find all the divisors of a number? What python functions or operators will be useful?



    spoiler


















    Code:
    import sys
    from math import sqrt
    
    def happy(a):
        b = str(a)
        for i in range(16):
            b = sum(int(c)**2 for c in b)
            if b == 1:
                return True
            b = str(b)
        return False
    
    def perfect(a):
        if a < 1:
            return False
        sum_of_divisors = 1
        for trial_divisor in range(2, 1 + int(sqrt(a))):
            (quotient, remainder,) = divmod(a, trial_divisor)
            if not remainder:
                sum_of_divisors += trial_divisor + quotient
        return sum_of_divisors == a
    
    def classify(a):
        return 'practical,happy,perfect,perfectly happy'.split(',')[perfect(a)*2 + happy(a)]
    
    def main():
        sys.stdout.write('Enter a positive integer: ')
        a = sys.stdin.readline()
        try:
            b = int(a)
        except:
            print('Next time, enter an integer')
            sys.exit(1)
        if b < 1:
            print('Next time, enter a positive integer')
            sys.exit(1)
        print(classify(b))
    
    if __name__ == '__main__':
        main()
    else:
        for i in range(99999):
            if 'perfectly' in classify(i):
                print(i)
    [code]Code tags[/code] are essential for python code and Makefiles!

IMN logo majestic logo threadwatch logo seochat tools logo