Python 未定义的变量问题
Python undefined variable issue
在 python 编程期间,我遇到了一个未定义的错误。
错误是关于'flag'变量的,我可以在上面的打印语句中使用它而没有任何错误。
为什么只有数组索引会出错?
如果你有什么想法,请分享给我。
感谢您的关注。
class Solution:
def rob(self, nums: List[int]) -> int:
global memo
memo = [[0 for j in range(len(nums))] for i in range(2)]
flag = 0
#print("===========================")
def dp(i : int) -> int:
global flag
if i >= len(nums):
#print(i,"return 0")
return 0
if i == 1:
flag = 1
#print(str(i) + " : " + str(globals), memo)
if memo[flag][i] is not 0: # <= undefined error occur because of flag
#print(i,"*",memo)
return memo[i]
memo[i] = max(dp(i+1), (dp(i+2) + nums[i]))
if i is len(nums) - 1 and i is not 0:
result = nums[i] * flag
flag = 0
#print(str(i) + " ! " , result)
return result
#print(i,"-",memo)
return memo[i]
return max(dp(0), dp(1))
NameError: name 'flag' is not defined. Did you mean: 'flags'?
if memo[flag][i] is not 0:
Line 21 in dp (Solution.py)
return max(dp(0), dp(1))
Line 37 in rob (Solution.py)
ret = Solution().rob(param_1)
Line 57 in _driver (Solution.py)
_driver()
Line 68 in <module> (Solution.py)
if i is len(nums) - 1 and i is not 0:
if memo[flag][i] is not 0:
好吧,问题的发生是因为您在另一个函数中有一个函数,所以 global
关键字将不起作用。 Python有四个作用域:Local、Enclose、Global,Built-in和rob
函数在Enclose作用域中,所以你要做的就是更改nonlocal
关键字如下:
def dp(i : int) -> int:
nonlocal flag
if i >= len(nums):
#print(i,"return 0")
return 0
顺便说一句,不推荐使用 local
或 nonlocal
,因此请尝试以其他方式使用。
在 python 编程期间,我遇到了一个未定义的错误。
错误是关于'flag'变量的,我可以在上面的打印语句中使用它而没有任何错误。
为什么只有数组索引会出错?
如果你有什么想法,请分享给我。
感谢您的关注。
class Solution:
def rob(self, nums: List[int]) -> int:
global memo
memo = [[0 for j in range(len(nums))] for i in range(2)]
flag = 0
#print("===========================")
def dp(i : int) -> int:
global flag
if i >= len(nums):
#print(i,"return 0")
return 0
if i == 1:
flag = 1
#print(str(i) + " : " + str(globals), memo)
if memo[flag][i] is not 0: # <= undefined error occur because of flag
#print(i,"*",memo)
return memo[i]
memo[i] = max(dp(i+1), (dp(i+2) + nums[i]))
if i is len(nums) - 1 and i is not 0:
result = nums[i] * flag
flag = 0
#print(str(i) + " ! " , result)
return result
#print(i,"-",memo)
return memo[i]
return max(dp(0), dp(1))
NameError: name 'flag' is not defined. Did you mean: 'flags'?
if memo[flag][i] is not 0:
Line 21 in dp (Solution.py)
return max(dp(0), dp(1))
Line 37 in rob (Solution.py)
ret = Solution().rob(param_1)
Line 57 in _driver (Solution.py)
_driver()
Line 68 in <module> (Solution.py)
if i is len(nums) - 1 and i is not 0:
if memo[flag][i] is not 0:
好吧,问题的发生是因为您在另一个函数中有一个函数,所以 global
关键字将不起作用。 Python有四个作用域:Local、Enclose、Global,Built-in和rob
函数在Enclose作用域中,所以你要做的就是更改nonlocal
关键字如下:
def dp(i : int) -> int:
nonlocal flag
if i >= len(nums):
#print(i,"return 0")
return 0
顺便说一句,不推荐使用 local
或 nonlocal
,因此请尝试以其他方式使用。