Python 验证多个变量的值
我的目标:用户只允许输入0或1(总共4个变量)。如果用户输入例如2、1、1、0,它应该抛出一个错误,说Python 验证多个变量的值,python,Python,我的目标:用户只允许输入0或1(总共4个变量)。如果用户输入例如2、1、1、0,它应该抛出一个错误,说只允许0和1 到目前为止我所尝试的: if (firstBinary != 0 or firstBinary != 1 and secondBinary != 0 or secondBinary != 1 and thirdBinary != 0 or thirdBinary != 1 and forthBinary != 0 or forthBinary != 1):
只允许0和1
到目前为止我所尝试的:
if (firstBinary != 0 or firstBinary != 1 and secondBinary != 0
or secondBinary != 1 and thirdBinary != 0 or thirdBinary != 1
and forthBinary != 0 or forthBinary != 1):
print('Only 0 and 1 allowed')
else:
print('binary to base 10: result)
问题:当我使用这样一个语句时,我要么在输入示例5时得到结果,要么在写入所有1或0时得到“仅允许0和1”
我发现这似乎是我所追求的,但它仍然不能像我希望的那样工作:
if 0 in {firstBinary, secondBinary, thirdBinary, forthBinary} or 1 in \
{firstBinary, secondBinary, thirdBinary, forthBinary}:
print("Your result for binary to Base 10: ", allBinaries)
else:
print('Only 0 and 1 allowed')
此代码基本上给出了与第一个代码示例相同的结果。使用any
:
v1, v2, v3, v4 = 0, 1, 1, 2
if any(x not in [0, 1] for x in [v1, v2, v3, v4]):
print "bad"
当然,如果你使用列表,它看起来会更好
inputs = [1, 1, 0 , 2]
if any(x not in [0, 1] for x in inputs):
print "bad"
我会把它分解为两部分,你要解决的是: 特定输入是否有效? 所有的输入都是有效的吗
>>> okay = [0,1,1,0]
>>> bad = [0,1,2,3]
>>> def validateBit(b):
... return b in (0, 1)
>>> def checkInput(vals):
... return all(validateBit(b) for b in vals)
...
>>> checkInput(okay)
True
>>> checkInput(bad)
False
>>>
这是由于python中的运算符优先级造成的。
或
运算符的优先级高于和
运算符,列表如下所示:
或
和
不是
=代码>,==
if ((firstBinary != 0 or firstBinary != 1) and (secondBinary != 0 or secondBinary != 1) and \
(thirdBinary != 0 or thirdBinary != 1) and (forthBinary != 0 or forthBinary != 1))
另一种方法是使用内置的all
功能:
vars = [firstBinary, secondBinary, thirdBinary, fourthBinary]
if not all(0 <= x <= 1 for x in vars):
print("Only 0 or 1 allowed")
vars=[firstBinary,secondBinary,thirdBinary,fourthBinary]
如果不是全部(0)您确定不应该缩进打印(“二进制到基数10的结果:”,allBinaries)
吗?对不起,缩进(糟糕的英语)是什么意思?变量allbinaries只是将a、b、c、d与8、4、2、1相乘,然后将它们相加。如果这是你的意思,我的意思是在行之前添加空格,使其位于if块中哦,是的!你说得对,很抱歉这是一个错误。更正:)谢谢,简单易懂!总的来说,我认为这个答案比所有的一行程序显示出更好的风格,因为它将每个操作分离成正交函数。当然,通过快速浏览,更容易理解它的功能。(而且第一次是对的——许多其他答案必须经过编辑才能有正确的代码!)
vars = [firstBinary, secondBinary, thirdBinary, fourthBinary]
if not all(0 <= x <= 1 for x in vars):
print("Only 0 or 1 allowed")
values = [firstBinary, secondBinary, thirdBinary]
if set(values) - set([0, 1]):
print "Only 0 or 1, please"