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