我猜这里有一个示波器问题,我错过了某个地方。此函数将所有数字平方并加在一起。如果数字达到1或89,它应该停止,否则继续前进。这是我的代码:
count = 0
def chain(x,count):
x = str(x)
temp = 0
for let in range(0,len(x)):
temp = temp + (int(x[let]) ** 2)
x = temp
print("\n")
print(temp)
if x == 89:
count = count + 1
print(count)
elif x == 1:
return False
else:
chain(x, count)
chain(145, 0)
print(count)
问题是,当我在x == 89时打印计数时,我得到1。但是当我在最后打印计数时,它显示为0。我查看了一下,但似乎没有设置它可以用于其他任何东西,我也尝试过添加return,return count,return True,但似乎没有任何解决方法。如果有人指出我的错误,我将不胜感激!
答案 0 :(得分:4)
解决方案1:
将count
设为全局变量
count = 0
def chain(x):
global count
x = str(x)
temp = 0
for let in range(0,len(x)):
temp = temp + (int(x[let]) ** 2)
x = temp
print("\n")
print(temp)
if x == 89:
count = count + 1
print(count)
elif x == 1:
return False
else:
chain(x)
chain(145)
print(count)
解决方案2: 返回计数并在递归调用时接收。
def chain(x,count):
x = str(x)
temp = 0
for let in range(0,len(x)):
temp = temp + (int(x[let]) ** 2)
x = temp
print("\n")
print(temp)
if x == 89:
count = count + 1
print(count)
elif x == 1:
pass # you may want to use -1 or something as flag
else:
count = chain(x, count)
return count
print(chain(145,0))
答案 1 :(得分:1)
这是两个具有相同名称的不同变量。当函数内部的计数变为零时,函数外部的计数将不会更改,因此最终打印将为0
答案 2 :(得分:1)
好吧,因为它是原始类型,所以计数不完全是一个引用,因此您不会每次都得到相同的对象(它是不可变的)。
此外,您在函数外部引用的计数与您最初传递的计数不同(因为您的第一个调用会向其提供0,而不是相同的变量)。
示例
count = 0
def chain(x):
global count
...
示例
line 01: count = {'total': 0}
line 20: chain(145, count)