Python 局部变量作为计数器
Python Local Variable As Counter
使用 Python 3.7.
有什么方法可以使用局部变量作为计数器吗?
我尝试并收到错误:
UnboundLocalError
我确实找到了使用有效的 glbal 变量的建议,但如果可能的话,我更愿意使用局部变量。
谢谢,
-w
使用计数器全局变量的工作代码:
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)
使用 Python 3.7.
有什么方法可以使用局部变量作为计数器吗? 我尝试并收到错误:
UnboundLocalError
我确实找到了使用有效的 glbal 变量的建议,但如果可能的话,我更愿意使用局部变量。
谢谢, -w
使用计数器全局变量的工作代码:
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)