2
a = int(raw_input("Enter a number to check if it is happy:"))
l = map(int, str(a))
c = 0
while 1:
    for i in l:
       b = i
       c = c + b **2
    if c == 1:
        print "Happy Number!"
        raw_input("Hit enter to end")
        break
    elif c == a:
        print ("Not a Happy number")
        raw_input("Hit enter to end")
        break
    else:
        l = map(int, str(c))

これは私が Python で書いたコードです。数値 1 と 0 で動作しますが、私が試した他の数値では無限にループします。誰かが見て、私が間違っていたことを見て、解決策を提案してもらえますか? ありがとう :)

参考: http: //en.wikipedia.org/wiki/Happy_number

4

6 に答える 6

7

これを試して:

a = int(raw_input("Enter a number to check if it is happy: "))
visited = set()
while 1:
    if a == 1:
        print "Number is happy!"
        break
    a = sum(int(c) ** 2 for c in str(a))
    if a in visited:
        print "Number is sad!"
        break
    visited.add(a)
于 2012-09-16T15:03:39.807 に答える
3

プロセス中に生成されたすべての値を保持する必要があります。

def is_happy_number(n):
     seen = set()
     while True:
           digits = [int(c) for c in str(n)]
           n = sum(digit**2 for digit in digits)
           if n == 1:
                return True
           elif n in seen:
                return False
           seen.add(n)

>>> is_happy_number(1)
True
>>> is_happy_number(7)
True
>>> is_happy_number(11)
False

これは、ループがある場合、開始した場所からループが開始されるとは限らないためです。例えば:

11 -> 2
2 -> 4
4 -> 16
16 -> 37
37 -> 58
58 -> 89
89 -> 145
145 -> 42
42 -> 20
20 -> 4

ご覧のとおり、「11」で始まりますが、ループは「4」で始まります。

于 2012-09-16T15:00:04.360 に答える
2

whileループ内にprintステートメントを配置します

while 1:
    print(l)

そして、ユーザーが入力したときに何が起こっているかを確認します2

リセットする必要がありますc = 0

else:
    l = map(int, str(c))
    c = 0

不幸な数の条件も変更する必要があります。デバッグ印刷ステートメントを入力すると、何をする必要があるかがわかると思います。

于 2012-09-16T14:55:57.857 に答える
1

2 つの問題があります。「c」をリセットする必要があり、それ自体がループバックすることはほとんどありません。これを試して:

a = int(raw_input("Enter a number to check if it is happy:"))
l = map(int, str(a))
while 1:
    c = 0
    for i in l:
       b = i
       c = c + b **2
    if c == 1:
        print "Happy Number!"
        raw_input("Hit enter to end")
        break
    elif c == 4:
        print ("Not a Happy number")
        raw_input("Hit enter to end")
        break
    else:
        l = map(int, str(c))

「c = 0」コマンドを移動し、elif ステートメントを調整しました

于 2015-07-18T04:26:47.647 に答える
0

elif c == a: の場合はなぜですか? ウィキ : 「n が満足していない場合、その数列は 1 にはなりません。代わりに、サイクルで終わることになります」

これを試して:

r=int(raw_input("Enter Number :"))
happy=[]
for _ in range(r):
    number=_
    l=[]
    s=0
    while not (s in l[:-1]) and s!=1:
        s=0
        for __ in str(number):
            s+= int(__)**2
        l.append(s)
        number=s
    if l[-1]==1:

        happy.append(_)

print ("Happy Numbers are :")
print happy
于 2012-09-16T15:14:07.553 に答える