首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python逻辑门电路仿真器

Python逻辑门电路仿真器
EN

Code Review用户
提问于 2023-06-01 01:35:01
回答 1查看 57关注 0票数 0

最近我对模拟逻辑电路产生了兴趣,因为我在学校上了一门电子学课。我在Python中为逻辑门电路创建了一个功能模拟器。我的实现是可行的,但我想知道它是否可以以任何方式进行优化或改进?项目代码太大,不适合这个问题,但位于https://github.com/barrettkwise/circuitsim。请告诉我任何可以改进的地方。

代码语言:javascript
复制
print("thanks")
print("for")
print("your help!")
EN

回答 1

Code Review用户

回答已采纳

发布于 2023-06-01 03:57:14

注意:在将来,您可能应该发布您最怀疑的代码片段或典型的代码片段,然后提供一个指向其他代码的链接。一切都很好!

总的来说,您的代码非常好。它似乎工作得很好,而且格式也很好;我特别喜欢您对类型提示的自由使用。我不明白.line系统背后的原因,但这与问题无关。

gateobject.pysimulator.py中,您可以eval任意用户文本。这是一种糟糕的做法(虽然在这种情况下,self.type被超感知可以最小化潜在的安全风险)。如果用户输入一个无效的门,它将产生一个丑陋的错误,如下所示:

代码语言:javascript
复制
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 1, in 
NameError: name 'BADGATE' is not defined

相反,尝试使用字典(如operators = {'OR': OR, 'AND': AND...});然后,如果self.type not in operators,您可以从那里处理错误(打印错误消息,exitraise,自定义错误等等)。这将使您的代码(稍微)更清晰,错误处理/消息(稍微)更好,您的程序(稍微)更快。

您还可以创建一个帮助函数(如def eval_op(op: str, arg1: str, arg2: str) -> str)来为您处理这个问题。

在一些地方,您使用极短的名称导入其他文件,如spsg。通常,您希望避免这种情况,因为它可能导致代码中的变量混淆和重叠。名字不是特别长,所以你可以把它们留在原样上。

您经常使用enumerate,这很好!但是,如果默认值为0,则可以指定enumerate(x 0)。你可以把它留在enumerate(x)

simulator.py:15-16中,将变量p_level从0计数到len(self.circuit),只在每个循环结束时增加变量。这可以用for p_level in range(0, len(self.circuit))更好地表达

simulator.py:18-21上,您可以使用名称curr_idscurr_vals来表示ids和vlaue,根据您的注释,这些ids和vlaue并不是当前的。是的,它们是您目前正在使用的,但是您可能希望重命名它们以避免混淆。

simulator.py:49-50上,您可以执行gate.out.value = eval(gate.type)(gate.in1.value, gate.in2.value),并在后面不使用第二个参数。您可能应该将其划分为Gate上的一个方法,例如setOutput()evalInputs()

simulator.py:53上,即使你知道gate.type == "NOT",你也可以做NOT(...)

在整个程序中,您使用"1""0"来表示真和假。如果用TrueFalse代替它们,它将做两件事:第一,它将简化logicops.py函数(即NOT(a: bool) -> bool: !a)。其次,它可能会使您的程序运行得更快和/或使用的空间更少,因为它不是处理字符串,而是处理布尔值。

总之,我建议您寻找更简单的方法来表示您的数据。您似乎对这些概念很在行,并且能够有效地实现它们;您只需要使用forbool这样的内置程序来简化代码。请给我反馈我的反馈,和快乐的编程!

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/285280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档