设计功能,因此变量无需大的if / else块即可获得赋值

约翰·雷克萨斯(John Lexus)

必须有更好的方法来做到这一点:

def map_leds(self, i):
        if i[0] == 1:
            self.ledg_1_1.setVisible(True)
            self.ledr_1_1.setVisible(False)
        else:
            self.ledg_1_1.setVisible(False)
            self.ledr_1_1.setVisible(True)

###############################################

        if int(i[1]) == 1:
            self.ledg_1_2.setVisible(True)
            self.ledr_1_2.setVisible(False)
        else:
            self.ledg_1_2.setVisible(False)
            self.ledr_1_2.setVisible(True)

###############################################

        if int(i[2]) == 1:
            self.ledg_1_3.setVisible(True)
            self.ledr_1_3.setVisible(False)
        else:
            self.ledg_1_3.setVisible(False)
            self.ledr_1_3.setVisible(True)

###############################################

        if int(i[3]) == 1:
            self.ledg_2_1.setVisible(True)
            self.ledr_2_1.setVisible(False)
        else:
            self.ledg_2_1.setVisible(False)
            self.ledr_2_1.setVisible(True)

###############################################

        if int(i[4]) == 1:
            self.ledg_2_2.setVisible(True)
            self.ledr_2_2.setVisible(False)
        else:
            self.ledg_2_2.setVisible(False)
            self.ledr_2_2.setVisible(True)

###############################################

        if int(i[5]) == 1:
            self.ledg_2_3.setVisible(True)
            self.ledr_2_3.setVisible(False)
        else:
            self.ledg_2_3.setVisible(False)
            self.ledr_2_3.setVisible(True)

###############################################

        if int(i[6]) == 1:
            self.ledg_3_1.setVisible(True)
            self.ledr_3_1.setVisible(False)
        else:
            self.ledg_3_1.setVisible(False)
            self.ledr_3_1.setVisible(True)

###############################################

        if int(i[7]) == 1:
            self.ledg_3_2.setVisible(True)
            self.ledr_3_2.setVisible(False)
        else:
            self.ledg_3_2.setVisible(False)
            self.ledr_3_2.setVisible(True)

###############################################

if int(i[8]) == 1:
            self.ledg_3_3.setVisible(True)
            self.ledr_3_3.setVisible(False)
        else:
            self.ledg_3_3.setVisible(False)
            self.ledr_3_3.setVisible(True)

我有9个LED,我的函数map_leds收到一个由len 9填充0和1组成的列表。如果第一个值为1,则第一个LED应该为绿色(这是GUI,因此LED实际上是一幅图片,我必须在两张图片之间切换,因此需要使用“ setVisible”功能)。如果第一个值为0,则LED(应显示)为红色。对于所有其他值,依此类推。

比起拥有巨大的if-else语句块,必须有一种更好的方法来实际完成所有这些工作,对吗?

皮特·威尔金(Piotr Wilkin)

您想做三件事:

  • 使用索引
  • 将平面向量转换为3x3数组
  • 将int值转换为boleans

首先,将您初始化led_r为数组:

self.led_r = []
for i in range(3):
    self.led_r[i] = [your_obj_constructor() for j in range(3)]

现在,您可以使用两条线:

for x in range(9):
    self.led_r[x // 3][x % 3].setVisible(i[x] == 1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无需安装即可获得 ruby gem 版本

无需通用参考即可获得通用参考的优势

无需假设即可获得用户输入

无需重复字典键即可获得最大对

无需请求网页即可获得连接

Shell脚本无需获得sudo即可获得超级用户特权

无需在控制台中按Enter即可获得按键

Laravel:重置密码无需验证即可获得6位数字

无需在代码中进行任何连接即可获得“列的定义不明确”

Firestore查询无需阅读文档即可获得结果大小?

AWS EC2 无需关闭和启动即可获得新的动态 IP

无需设置即可获得两个列表的差异的更快方法

无需重复链接getChildAt()即可获得嵌套级视图的最佳方法

iPhone无需私人图书馆即可获得SSID

Kotlin扩展,无需反射即可获得下一个Enum值

只需最少的Apache模块即可获得静态网站且无需authN

TFX-无需串行化数据输入即可获得预测的REST API

无需用户更改系统小时即可获得时/分/秒

我如何在MVC视图上无需时间即可获得当前日期

使用Spring JPA和H2数据库后,无需重新启动应用程序即可获得ID

没有<pre>标签即可获得<pre>结果

单击按钮即可获得角动态HTML

通过不同的node.js模块/文件传递变量时,可获得最佳性能

启动多个线程,仅等待一个线程完成即可获得结果

简单的代码即可获得第n个斐波那契数

排球连接使用一次即可获得所有数据

不使用Sklearn管道即可获得与Sklearn管道相同的结果

更改一个数字即可获得算术序列

一次登录即可获得多种产品