我有这个在Python 2.7.9中编写的小python文件,现在我在Python 3.4.3中测试它。
一切正常,因为我能够将命令发送到我的RPI。但是当我发送命令更改扬声器的音量(范围为1-100)时,它们都被python脚本读取为100%。
config/private.yml
,被视为第100卷。我添加了使用volume = ...注释掉的行,它现在可以正常工作,但我不能阻止人们将卷发送到最大@ 100%。
Volume 26
答案 0 :(得分:4)
我猜你说volume 26
被视为100%
,你的意思是60
。
那是因为行 -
max(60, min(30, volume))
这大致转换为,最小介于30和音量之间,最大介于音量和60之间,所以你总是得到60,因为如果音量大于30,你将从内部min()
获得30,并且从外max()
你会得到60.你可以想到,如果音量小于30,会发生什么。
你真的想做 -
volume = min(60, max(30, volume))
我不确定这将如何在Python 2.7中运行,根据上述条件,问题应该也适用于Python 2.7。
答案 1 :(得分:4)
更具可读性的是根本不使用min
和max
;它们可以有效地找到任意数量的参数的极值,但只有两个是过分的。
if volume < 30:
volume = 30
elif volume > 60:
volume = 60
(这会产生修复您正在使用的嵌套构造导致的任何逻辑错误的副作用。)
答案 2 :(得分:1)
我想,你真正想要的是你的音量在30..60的范围内。在这种情况下,您应该将最小/最大行交换为:
volume = min(60, max(30, volume))
因此,您获得最大音量和30 - (至少30) - 以及该结果的最小值60 - 最多60.