任何人都可以解释为什么if条件有效。
x = 0xA5
if x == 0xAA or 0x5A or 0xA0 or 0xAB:
print "Host Address is Correct"
0xAA or 0x5A or 0xA0 or 0xAB binary operation is not equal to 0xA5 either
答案 0 :(得分:2)
当你说
时,Python并没有按照你的想法行事float fillProgress = 0.1f; // let's say image is 10% filled
canvas.drawBitmap(onlyStroke, 0f, 0f, null); // draw just stroke first
canvas.save();
canvas.clipRect(
0f, // left
getHeight() - fillProgress * getHeight(), // top
getWidth(), // right
getHeight() // bottom
);
canvas.drawBitmap(filled, 0f, 0f, null); // region of filled image specified by clipRect will now be drawn on top of onlyStroke image
canvas.restore();
正在检查if x == 0xAA or 0x5A or 0xA0 or 0xAB:
或 x==0xAA
是否为“真实” - 例如,其中非空字符串被视为0x5a
- 依此类推。您收到的错误表明True
中的一个是“真实的”。你需要做的是
0x5A, 0xA0, 0xAB
可以更容易地表达为
if x == 0xAA or x == 0x5A or x == 0xA0 or x == 0xAB:
虽然应该注意,如果if x in [0xAA, 0x5A, 0xA0, 0xAB]:
等是字符串,则需要将它们写成0xAA
等。
答案 1 :(得分:2)
由于运算符优先级,$ var='100%'; printf "Value is $var"
bash: printf: `%': missing format character
$ var='100%'; printf "Value is %s" "$var"
Value is 100%
具有较高的优先级,因此==
首先评估or
并返回x==0xAA
,但每个其他十六进制字符都返回True,所以基本上你的表达式变为
False
将导致True。
您应该修改代码以获得所需的操作。
x = False or True or True or True
在此处检查运营商优先级 https://www.tutorialspoint.com/python/operators_precedence_example.htm
答案 2 :(得分:0)
saurabh关于它是一个优先问题是正确的,你的表达式正在被评估如下:
x == (0xAA or 0x5A or 0xA0 or 0xAB)
当你最想要使用的时候:
x in (0xAA, 0x5A, 0xA0, 0xAB)