happy number bulmak için özyinelemiyim.Özyinelemeli işlev içeren Python kodumdaki sorun nedir?
deepth = 0
def is_happy_number(number):
astring = str(number)
global deepth
digits = [int(char) for char in astring]
sum_digit = sum([digit**2 for digit in digits])
if sum_digit == 1:
deepth = 0
return True
else:
deepth += 1
if deepth >800:
return False
return is_happy_number(sum_digit)
print '7',is_happy_number(7)
for number in range(1,11):
print number,is_happy_number(number)
sonuçlarıdır: yalnız sayı 7 sınamak
7 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 True
, bu 'True' döndürür
şu benim Python kodudur. Son iki sıra kodunu çalıştırdığım sırada 7 numaralı 'False' döndürürüm.
Hangi bölümün yanlış olduğunu bilmiyorum.
Birkaç dakika sonra Python kodumun yanlış bölümünü buluyorum. Şunu da ekleyeyim:
deepth = 0
sonra: @Will hatırlatmak ile
if deepth > 800:
, bu soruna başka bir çözüm bulmak. Modifiye Kod aşağıdaki gibidir: Sen küresel değişkeni depth
sıfırlamak için başarısız konum
def is_happy_number(number, deepth=0):
astring = str(number)
digits = [int(char) for char in astring]
sum_digit = sum([digit**2 for digit in digits])
if sum_digit == 1:
return True
else:
deepth += 1
if deepth >800:
return False
return is_happy_number(sum_digit,deepth)
print '7',is_happy_number(7,0)
for number in range(1,10):
if is_happy_number(number,0):
print number,
Vahşi bir tahmin: 'global deepth' değişkeninin onunla bir ilgisi vardır (BTW," derinlik "yazılmalıdır). –