棘手的简单Python

时间:2016-11-10 16:39:22

标签: python if-statement

任何人都可以解释为什么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

3 个答案:

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