2016-08-10 7 views
-2

入力した数字がhappy numberかどうかを確認するプログラムを作成しようとしています。ハッピーナンバーを確認する - elseステートメントが機能しない

私のコードでは、二乗と加算の後にそれぞれの数字が見つけられますが、1になると「それは幸せな数字です」と表示されると思います。

私はコードに何か間違っているのを見ることはできませんが、私は単純なものを見逃す可能性があります。

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' 
+4

数値は文字列であり、それは – levi

+1

と比較しています。「not number == 1」は 'number!= 1'としてよく書けます。 – Barmar

+0

'number'はすでに文字列なので、' str(number) 'を使う必要はありません。 – Barmar

答えて

0

私はコードに何かを参照してください傾けるが、私は

うんシンプルなもの、シンプルな何かが欠けている可能性がありnumber = raw_input('What number?')number = str(added)number作っている:ここでは

コードです文字列値ですが、それでも整数値が 1でないかどうかをチェックします。これは常に真であるため、 "else文は機能していません"。


ここで、その辞書がどのような目的で使用されているのかよく分かりません。たぶん、計算された値を保存して、それ以上の計算を防ぐことはできますか?それは問題ありませんが、ここでは最初の1000の幸せな数字のためにすでにうまく動作するソリューションがあります。

最初に、数値の2乗和を計算する2つの関数。数値を文字列に変換し、文字を繰り返し処理して整数にキャストすることは、不要なオーバーヘッドであることに注意してください。

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回であるかどうかをチェックする関数。

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 
+0

ありがとうございました。私は、入力された数字に任意の桁数を使用できるように辞書を使用していました。 – Andy

関連する問題