Python局部变量作为计数器
使用Python3.7 有没有办法使用局部变量作为计数器? 我尝试并收到错误: 未绑定本地错误 我确实找到了使用glbal变量的建议,但如果可能的话,我更喜欢使用局部变量 谢谢, -w 使用计数器的全局变量的工作代码:Python局部变量作为计数器,python,function,variables,global,local,Python,Function,Variables,Global,Local,使用Python3.7 有没有办法使用局部变量作为计数器? 我尝试并收到错误: 未绑定本地错误 我确实找到了使用glbal变量的建议,但如果可能的话,我更喜欢使用局部变量 谢谢, -w 使用计数器的全局变量的工作代码: count = 0 def my_collatz(number): global count count +=1 if int(number)%2 == 0: r = int((number)//2) else:
count = 0
def my_collatz(number):
global count
count +=1
if int(number)%2 == 0:
r = int((number)//2)
else:
r = int(((number * 3) + 1))
print('Attempt : ' + str(count) + ',' + str(r))
if r != 1:
return my_collatz(int(r))
print('Please enter a number : ')
number=input()
my_collatz(int(number))
一种可能的解决方案是将
count
变量作为参数移动到函数中,并在每次调用时递增:
def my_collatz(number, count=1):
if number % 2 == 0:
r = number // 2
else:
r = (number * 3) + 1
print('Attempt : ' + str(count) + ',' + str(r))
if r != 1:
return my_collatz(r, count + 1)
print('Please enter a number : ')
number=input()
my_collatz(int(number))
印刷品:
Please enter a number :
6
Attempt : 1,3
Attempt : 2,10
Attempt : 3,5
Attempt : 4,16
Attempt : 5,8
Attempt : 6,4
Attempt : 7,2
Attempt : 8,1
另一种解决方案是根本不使用
count
,而是将函数作为生成器(使用yield
)。然后可以使用enumerate()
获得步骤数:
def my_collatz(number):
if number % 2 == 0:
r = number // 2
else:
r = (number * 3) + 1
yield r
if r != 1:
yield from my_collatz(r)
print('Please enter a number : ')
number=input()
for count, r in enumerate(my_collatz(int(number)), 1):
print('Attempt : ' + str(count) + ',' + str(r))
这确实是一个非常奇怪的函数。无论如何,通过将全局变量转换为输入参数,可以避免使用全局变量:
count = 0
def my_collatz(number, count):
count +=1
if int(number)%2 == 0:
r = int((number)//2)
else:
r = int(((number * 3) + 1))
print('Attempt : ' + str(count) + ',' + str(r))
if r != 1:
return my_collatz(int(r), count=count)
print('Please enter a number : ')
number=input()
my_collatz(int(number),count)
你到底在数什么?您的代码示例似乎只有一个函数调用,在这一点上,
count
似乎毫无意义?@paritossingh:显示的函数是递归的,注意返回函数体中的my_collatz(int(r))
行啊,我错过了,gotchaThanks all,如果您感兴趣,这里有更多关于collatz的信息: