在函数内部调用函数,但终端将函数调用视为全局名称
Calling a function inside a function but the terminal treats the function call as a globalname
手头的任务是能够return 位串的按位与和按位或。一切似乎都很好,但我的直接问题是将我的第一个函数调用到其他两个函数中。
我尝试解决更改代码的问题,并提出了不同的变量名,但没有任何改变终端中看到的错误。我也试过 if __name__ == __'main'__:
但也没有任何改变。我整天都在研究,但仍然没有解决问题。这是我的代码:
class BitOperator(object):
def bitOperator(self,bit1,bit2):
#Start writing your code from here
self.bit1 = bit1
self.bit2 = bit2
len1 = len(bit1)
len2 = len(bit2)
if len1 < len2:
bit1 = (len2 - len1) * '0' + bit1
len1 = len2
elif len2 < len1:
bit2 = (len1 - len2) * '0' + bit2
len2 = len1
return len1, bit1, bit2
def OperationAND(self, _bit1, _bit2):
_bit1, _bit2, _len = self.bitOperator(_bit1, _bit2)
self._bit1 = _bit1
self._bit2 = _bit2
res = ""
for i in range(_len):
res += str(int(_bit1[i])) & str(int(_bit2[i]))
return res
finalresult = OperationAND('10001', '11011')
在终端中,我得到的是这条消息:NameError: global name 'bitOperator' is not defined
没有想法,如果能得到一些帮助,我们将不胜感激。
在帮助下我的旧问题消失了。将 self.bitOperator 添加到我的其他函数后,我遇到了一个新问题。 line 43, in BitOperator finalresult = OperationAND('10001', '11011') TypeError: OperationAND() takes exactly 3 arguments (2 given)
。我能得到更多指导吗?
以下是解决 finalresult = OperationAND('10001', '11011')
语句问题的方法,即将它从 class
定义中删除,还有我在这个过程中遇到的其他一些错误这样做。
下面是最终结果,# ALL CAP COMMENTS
表示我更改的所有内容(我认为)。
class BitOperator(object):
def bitOperator(self, bit1, bit2):
self.bit1 = bit1
self.bit2 = bit2
len1 = len(bit1)
len2 = len(bit2)
if len1 < len2:
bit1 = (len2 - len1) * '0' + bit1
len1 = len2
elif len2 < len1:
bit2 = (len1 - len2) * '0' + bit2
len2 = len1
return bit1, bit2, len1 # THESE WERE BEING RETURNED IN WRONG ORDER
def operationAND(self, _bit1, _bit2):
_bit1, _bit2, _len = self.bitOperator(_bit1, _bit2)
self._bit1 = _bit1
self._bit2 = _bit2
res = ""
for i in range(_len):
res += str(int(_bit1[i]) & int(_bit2[i])) # CORRECTED EXPRESSION.
return res
# finalresult = operationAND('10001', '11011') # REMOVED FROM CLASS DEFINITION.
# ADDED THIS SECTION TO ILLUSTRATE USE OF CLASS.
if __name__ == '__main__':
bitoper = BitOperator() # Create instance of class.
finalresult = bitoper.operationAND('10001', '11011')
print(finalresult) # -> 10001
手头的任务是能够return 位串的按位与和按位或。一切似乎都很好,但我的直接问题是将我的第一个函数调用到其他两个函数中。
我尝试解决更改代码的问题,并提出了不同的变量名,但没有任何改变终端中看到的错误。我也试过 if __name__ == __'main'__:
但也没有任何改变。我整天都在研究,但仍然没有解决问题。这是我的代码:
class BitOperator(object):
def bitOperator(self,bit1,bit2):
#Start writing your code from here
self.bit1 = bit1
self.bit2 = bit2
len1 = len(bit1)
len2 = len(bit2)
if len1 < len2:
bit1 = (len2 - len1) * '0' + bit1
len1 = len2
elif len2 < len1:
bit2 = (len1 - len2) * '0' + bit2
len2 = len1
return len1, bit1, bit2
def OperationAND(self, _bit1, _bit2):
_bit1, _bit2, _len = self.bitOperator(_bit1, _bit2)
self._bit1 = _bit1
self._bit2 = _bit2
res = ""
for i in range(_len):
res += str(int(_bit1[i])) & str(int(_bit2[i]))
return res
finalresult = OperationAND('10001', '11011')
在终端中,我得到的是这条消息:NameError: global name 'bitOperator' is not defined
没有想法,如果能得到一些帮助,我们将不胜感激。
在帮助下我的旧问题消失了。将 self.bitOperator 添加到我的其他函数后,我遇到了一个新问题。 line 43, in BitOperator finalresult = OperationAND('10001', '11011') TypeError: OperationAND() takes exactly 3 arguments (2 given)
。我能得到更多指导吗?
以下是解决 finalresult = OperationAND('10001', '11011')
语句问题的方法,即将它从 class
定义中删除,还有我在这个过程中遇到的其他一些错误这样做。
下面是最终结果,# ALL CAP COMMENTS
表示我更改的所有内容(我认为)。
class BitOperator(object):
def bitOperator(self, bit1, bit2):
self.bit1 = bit1
self.bit2 = bit2
len1 = len(bit1)
len2 = len(bit2)
if len1 < len2:
bit1 = (len2 - len1) * '0' + bit1
len1 = len2
elif len2 < len1:
bit2 = (len1 - len2) * '0' + bit2
len2 = len1
return bit1, bit2, len1 # THESE WERE BEING RETURNED IN WRONG ORDER
def operationAND(self, _bit1, _bit2):
_bit1, _bit2, _len = self.bitOperator(_bit1, _bit2)
self._bit1 = _bit1
self._bit2 = _bit2
res = ""
for i in range(_len):
res += str(int(_bit1[i]) & int(_bit2[i])) # CORRECTED EXPRESSION.
return res
# finalresult = operationAND('10001', '11011') # REMOVED FROM CLASS DEFINITION.
# ADDED THIS SECTION TO ILLUSTRATE USE OF CLASS.
if __name__ == '__main__':
bitoper = BitOperator() # Create instance of class.
finalresult = bitoper.operationAND('10001', '11011')
print(finalresult) # -> 10001