在函数内部调用函数,但终端将函数调用视为全局名称

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