检查一个快乐的号码 - 其他声明不起作用

时间:2016-08-10 16:59:43

标签: python

我试图创建一个程序来检查输入的数字是否为happy number

我的代码在平方和添加后找到每个数字但是当它达到1时,我希望它打印出来#34;这是一个快乐的数字"。

我看不出代码有什么问题,但我可能会遗漏一些简单的东西。

以下是代码:

number = raw_input('What number?')
dictionary = {}
counter = 0
counter_2 = 0 

while counter_2 < 20:
     counter_2 += 1
     if number != 1:        
        for n in str(number):
            n = int(n)**2
            counter += 1 
            dictionary ['key{}'.format(counter)] = n

        added = sum(dictionary.values())
        dictionary = {}
        number = str(added)             
        print number

     else:
        print 'that is a happy number'

2 个答案:

答案 0 :(得分:0)

  

我看不出代码有什么问题,但我可能会遗漏一些简单的

是的,简单的number = raw_input('What number?')number = str(added)正在使number成为字符串值,但是您想要检查它是否不是整数值1,这是永远都是真的,所以“其他声明不起作用”。

现在,我不太确定该词典的用途。也许保存已计算的值以防止进一步计算?这没关系,但这里有一个解决方案,对于前1000个满意的数字已经运行良好。

首先,两个函数用于计算数字的平方和。注意,将数字转换为字符串,然后迭代字符并转换回整数是不必要的开销。

square = lambda x: x**2

def square_digits(x):
    square_sum = 0
    while x > 0:
        square_sum += square(x % 10)
        x /= 10
    return square_sum

然后是一个函数,它检查一个数字是否是一个限制为20次迭代的Happy数字,以防止无限循环。

def check_happy(n, limit=20):
    counter = 0
    while n != 1 and counter < limit:
        counter += 1
        n = square_digits(n)
    else:
        return counter != limit

然后,只需检查您的价值

number = int(raw_input('What number?'))

if check_happy(number):
    print number, 'is a happy number'

示例输出。

What number? 19
19 is a happy number

答案 1 :(得分:0)

这是我的程序,用于查找C ++中数字是否快乐

#include <iostream>

using namespace std;

int main() {
    int i,j,num,temp,sum=0;
    cout<<"Enter number\n";
    cin>>num;
    while (sum != 1 && sum != 4) {
        sum=0;
        while (num > 0) {
            j = num % 10;
            sum += (j * j);
            num /= 10;
        }
        num = sum;
    }
    if (sum == 1) {
        cout<<"Happy Number\n";
    } else {
        cout<<"UnHappy Number\n";
    }
    return 0;
}