使用min和max将值限制为Python中的范围

时间:2015-08-17 15:47:31

标签: python python-3.x

我有这个在Python 2.7.9中编写的小python文件,现在我在Python 3.4.3中测试它。

一切正常,因为我能够将命令发送到我的RPI。但是当我发送命令更改扬声器的音量(范围为1-100)时,它们都被python脚本读取为100%。

实施例

config/private.yml,被视为第100卷。我添加了使用volume = ...注释掉的行,它现在可以正常工作,但我不能阻止人们将卷发送到最大@ 100%。

代码:

Volume 26

3 个答案:

答案 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)

更具可读性的是根本不使用minmax;它们可以有效地找到任意数量的参数的极值,但只有两个是过分的。

if volume < 30:
    volume = 30
elif volume > 60:
    volume = 60

(这会产生修复您正在使用的嵌套构造导致的任何逻辑错误的副作用。)

答案 2 :(得分:1)

我想,你真正想要的是你的音量在30..60的范围内。在这种情况下,您应该将最小/最大行交换为:

volume = min(60, max(30, volume))

因此,您获得最大音量和30 - (至少30) - 以及该结果的最小值60 - 最多60.