鱼C论坛

 找回密码
 立即注册
查看: 1362|回复: 2

逆向思维的构造电路

[复制链接]
发表于 2023-9-8 09:26:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class logicalgate:
    def __init__(self,label):#这是最通用的类logicgate
        self.label = label
        self.output = None
    def getlabel(self):#逻辑门要有标签,要有能获得标签的方法,也要能获得输出值的方法,要有输出值
        return self.label
    def getoutput(self):
        self.output = self.performgatelogic()#目前还不用知道该函数的用法,因为每种逻辑门的算法都不一样
        return self.output


class Binarygate(logicalgate):#继承父类的方法
    def __init__(self, label):#逻辑门要有标签,logicgate的子类Binarygate也不列外,所以这里要调用其父类的创造标签的方法,即super().__init__(labe),super()为其父类,否则就不能创造标签。
        super().__init__(label)#调用super().__init__(labe)后,就默认有self.label = label,self.output = None,父类的方法(函数)也有继承
        self.pinA = None #Binargate有两个输入接口,分别是self.pinA 和self.pinB,,默认为None,即没接入状态一个输出接口
        self.pinB = None
    def getpinA(self): #要得到此逻辑门的输出值
        if self.pinA == None:
            return int(input("Enter pinA -->" + self.label ))
        else:
            return self.pinA.getFrom().getoutput()


   
    def getpinB(self):
        if self.pinB == None:
            return int(input("Enter pinB -->" + self.label ))
        else:
            return self.pinB.getFrom().output()

class Unarygate(logicalgate): #只有一个输入值,一个输出值,是logicalgate的子类
    def __init__(self, label):
        super().__init__(label)

        self.pin = None

    def getpin(self):
        return int(input("Enter pin -->" + self.label ))
         

class AndGate(Binarygate): #要有两个输入值,并且只有都为一时才返回一
    def __init__(self, label):#其调用它的父类,他的父类有调用它的父类,所以共继承有两个输入值,一个输出值,一个标签,方法也有继承
        super().__init__(label)

    def performgatelogic(self):
        a = self.getpinA()
        b = self.getpinB()
        if a== 1 and b==1:
            return 1
        else:
            return 0

    def setNextPin(self, source): #source 这里指的是conector的是列对象
        if self.pinA == None:
            self.pinA = source
        else:
            if self.pinB == None:
                self.pinB = source
            else:
                raise RuntimeError("你是啥插拔")




            

class conector:  #用于连接两个逻辑门
   
    def __init__(self, fgate, tgate):
        self.fgate = fgate
        self.tgate = tgate

        tgate.setNextPin(self)


    def getFrom(self):
        return self.fgate

    def getTo(self):
        return self.tgate
   
      


        
e = AndGate("rr")
d = AndGate("rrrrr")
a = conector(e, d)
print(d.getoutput()) #从最后一个逻辑门开始运行,逆向思维

本人对于conector类的代码段,setNextPin(self, source)函数的设置原理,与 self.pinA.getFrom().getoutput()不是很了解,有呢为大神帮解释一下,也可讲解一下此代码的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-8 09:27:00 | 显示全部楼层
在这段代码中, conector 类用于连接两个逻辑门。 setNextPin(self, source) 函数的作用是将一个逻辑门对象作为参数 source 传入,并将其设置为当前逻辑门对象的输入接口。

具体来说, setNextPin(self, source) 函数的实现逻辑如下:
· 首先,判断当前逻辑门对象的 pinA 属性是否为空。如果为空,说明该逻辑门对象的第一个输入接口还未连接,将 source 赋值给 pinA 属性。
· 如果 pinA 属性不为空,则判断 pinB 属性是否为空。如果为空,说明该逻辑门对象的第二个输入接口还未连接,将 source 赋值给 pinB 属性。
· 如果 pinB 属性也不为空,则抛出一个 RuntimeError 异常,表示不能再连接更多的输入接口。

这样,通过不断调用 setNextPin(self, source) 函数,可以将多个逻辑门对象连接起来,形成一个逻辑电路。

关于 self.pinA.getFrom().getoutput() ,这是一个链式调用的方式。假设 self.pinA 是一个连接到当前逻辑门对象的输入接口的连接器对象,那么 self.pinA.getFrom() 会返回连接器对象的起始逻辑门对象,而 getoutput() 方法则会返回该逻辑门对象的输出值。

总体来说,这段代码实现了逆向思维的构造电路,通过连接不同的逻辑门对象,可以实现各种逻辑功能的电路。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-9 07:56:17 | 显示全部楼层
你的代码中涉及了逻辑门和连接器的模拟实现,让我来为你解释一下其中涉及到的一些概念和代码段。

首先,让我们先梳理一下主要的类和它们的关系:

1. `logicalgate` 类是一个通用的逻辑门类,拥有标签 (`label`) 和输出值 (`output`) 属性,以及获取标签和输出值的方法 (`getlabel` 和 `getoutput`)。

2. `Binarygate` 类继承了 `logicalgate` 类,表示一个有两个输入的逻辑门。它额外包含两个属性 `pinA` 和 `pinB`,分别代表两个输入接口。

3. `Unarygate` 类也继承了 `logicalgate` 类,表示一个只有一个输入的逻辑门,它包含一个属性 `pin` 代表输入接口。

4. `AndGate` 类继承了 `Binarygate` 类,表示一个与门,其 `performgatelogic` 方法实现了与门的逻辑,即只有当两个输入都为1时,输出为1。

5. `conector` 类用于连接两个逻辑门,它有一个构造函数 `__init__`,接受两个逻辑门对象作为参数,并将自己作为连接器连接到目标逻辑门上。

下面我们来解释一下你提到的两个代码段:

1. `self.pinA.getFrom().getoutput()`:
   这段代码在 `Binarygate` 类中的 `getpinA` 和 `getpinB` 方法中用到。它的作用是获取当前输入接口 `pinA` 或 `pinB` 对应的逻辑门的输出值。解释步骤如下:
   - `self.pinA` 或 `self.pinB` 代表当前的输入接口对象。
   - `getFrom()` 方法返回连接器的起始逻辑门对象。
   - `getoutput()` 方法返回起始逻辑门的输出值。

2. `setNextPin(self, source)`:
   这是在 `AndGate` 类中的方法,用于将连接器连接到逻辑门的输入接口上。解释如下:
   - `source` 是一个连接器对象,它连接了两个逻辑门。
   - `if self.pinA == None:` 检查当前的 `pinA` 是否为空,如果是的话,将 `source` 赋值给 `pinA`,表示连接到了第一个输入接口。
   - 否则,检查 `pinB` 是否为空,如果是的话,将 `source` 赋值给 `pinB`,表示连接到了第二个输入接口。
   - 如果 `pinA` 和 `pinB` 都不为空,抛出运行时错误。

总的来说,这段代码实现了一个简单的逻辑门模拟器,可以创建不同类型的逻辑门,并通过连接器将它们连接起来。连接器负责将一个逻辑门的输出连接到另一个逻辑门的输入,从而模拟逻辑电路的运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表