Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在函数内部调用函数,但终端将函数调用视为全局名称_Python_Scope - Fatal编程技术网

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

Python 在函数内部调用函数,但终端将函数调用视为全局名称,python,scope,Python,Scope,手头的任务是能够从位字符串返回按位AND和按位OR。一切似乎都很好,但我眼前的问题是将我的第一个函数调用到其他两个函数中。 我试图解决更改代码的问题,并提出了不同的变量名,但没有改变终端中出现的错误。我也尝试了如果'uuuuuu name'=='uuuuuuu'main'':,但是没有任何改变。我已经研究了一整天,但仍然没有解决这个问题。这是我的密码: class BitOperator(object): def bitOperator(self,bit1,bit2): #St

手头的任务是能够从位字符串返回按位AND和按位OR。一切似乎都很好,但我眼前的问题是将我的第一个函数调用到其他两个函数中。 我试图解决更改代码的问题,并提出了不同的变量名,但没有改变终端中出现的错误。我也尝试了
如果'uuuuuu name'=='uuuuuuu'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')
类位运算符(对象):
def位运算符(自身、位1、位2):
#从这里开始编写代码
self.bit1=bit1
self.bit2=bit2
len1=len(位1)
len2=len(位2)
如果len1
在终端中,我得到的是这样一条消息:
NameError:global name“bitmoperator”未定义
,如果您能提供帮助,我将不胜感激


在帮助下,我的旧问题消失了。将self.bitmoperator添加到其他函数后,我遇到了一个新问题<代码>第43行,在BitOperator finalresult=OperationAND('10001','11011')类型错误:OperationAND()正好接受3个参数(给定2个)
。我能得到更多的指导吗?

下面是如何解决您在
finalresult=operation和('10001','11011')
语句中遇到的问题,该语句将它从
类定义中删除,以及我在执行过程中遇到的一些其他错误

下面是最后的结果,所有CAP注释都表明了我所做的每一件事(我想)

类位运算符(对象):
def位运算符(自身、位1、位2):
self.bit1=bit1
self.bit2=bit2
len1=len(位1)
len2=len(位2)
如果len110001

您在类定义中,因此您可能想说的是
self.bitmoperator
?要获得调试帮助,请提供包含完整错误消息的。这里的大部分代码与问题无关。例如,
operation和
operation或
与此错误完全相同,因此删除一个。您忘记了将
self
作为第二个和第三个函数的第一个参数。将缺少的
self
参数添加到这两个方法后,您需要在它们中使用它来调用
self.bitmoperator()
@martineau谢谢您的回复。我认为我不知道如何在方法中使用它,因为我认为我已经在这样做了。我更新了我的工作。
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