HOWTO · Python

在 Python 中检查数字是偶数还是奇数

我们可以使用模运算符 % 或按位 AND 运算符 & 来检查 Python 中的数字是偶数还是奇数。

本页内容

在 Python 中,检查整数是否为偶数,可以看 num % 2 是否等于 0;否则就是奇数。偶数可以被 2 整除且余数为零,奇数除以 2 后余数为一。取模运算符是完成这项判断时最清晰的默认选择。按位 AND 与 1 运算也是一种仅适用于整数的选择。

使用取模运算符检查奇偶性

取模运算符 % 会给出除法的余数。对于整数,除以 2 后,偶数的余数为 0,奇数的余数为 1。在 Python 中,这条规则也适用于负整数:例如,-4 % 2 的结果是 0,而 -3 % 2 的结果是 1。

运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

def check_parity(num):
    if num % 2 == 0:
        print("even")
    else:
        print("odd")


check_parity(22)

提供的运行记录显示,check_parity(22) 会打印 even。该函数直接检查能否整除,并打印一个标签;将 22 替换为你要判断的整数即可。这个函数需要整数,而不是 2.5 这样的十进制数。代码中的 even 标签保持英文。

使用按位 AND 运算符检查奇偶性

按位 AND 运算符 & 会比较两个整数中对应的位。在整数的二进制表示中,偶数的最低有效位是 0,奇数的最低有效位是 1。因此,偶数的 num & 1 结果为 0,奇数的结果为 1。这里 Python 执行的是整数按位运算;它不会先创建二进制字符串。

例如,22 的最低有效位是 0,所以 22 & 1 的结果是 0。33 的这一位是 1,所以 33 & 1 的结果是 1。下面的函数会将这个结果用作条件:

本节中的代码以及显示的标签或输出仍为英文。

def check_parity(num):
    if num & 1 == 0:
        print("even")
    else:
        print("odd")


check_parity(33)

提供的运行记录显示,check_parity(33) 会打印 odd。表达式 num & 1 会先于相等比较求值,因此这个条件检查的是最低有效位是否为 0。与取模版本一样,传入函数的应是整数。代码中的 odd 标签保持英文。

为了易读性选择取模运算符

这两种表达式都能判断整数的奇偶性:num % 2 == 0 检查余数,num & 1 == 0 检查最低位。取模写法通常更直接地表达了判断意图,尤其适合不处理位运算的读者。一般进行奇偶判断时,优先使用取模;如果周围代码已经在使用按位运算,或需要关注位级行为,也可以选择按位写法。

按位写法是有效的替代方案,但对于常见的 Python 代码,它并非必要的优化。选择一种写法并保持一致,同时明确输入类型:这些判断描述的是整数的奇偶性,并非任意数值在数学上能否被二整除。如果函数接收外部输入,应在调用奇偶判断之前验证或转换输入;具体转换策略取决于应用,不应隐藏在奇偶判断表达式中。