Python 不带等号和不等号的模运算符

Python Modulo Operator without An Equal Sign and A Not-Equal Sign

def even_or_odd(number):
    return 'Odd' if number % 2 else 'Even'

print(even_or_odd(2))

为什么这个 Python 代码打印偶数而不是奇数?

表达式 number % 2,其中 number 是偶数,将为您提供零。这是 Python 中的错误值,因此 if 将失败并输出 Even。与以下内容没有什么不同:

>>> if 0:
...     print('zero')
... else:
...     print('nonzero')
...
nonzero

如果您希望 if 语句 成功 为偶数,最好使用 number % 2 == 0,这会给您 True 对于偶数。该等效语句将写为:

return 'Even' if number % 2 == 0 else 'Odd'

但是,考虑到您在标题中的限制(没有 ==!=),这是不允许的(a)。使用“反向”逻辑可以解决这个问题。


顺便说一下,执行此操作的其他方法可能包括(可能还有很多):

return 'Even' if not number % 2 else 'Odd'
return ['Even', 'Odd'][number % 2]

(a) 虽然我很不喜欢这种类型的人为限制,但教育工作者经常会在作业中出现。毕竟,什么时候真正要求开发人员在没有 = 键的情况下实现某些东西?也许如果他们的键盘坏了?但是,你更大的问题肯定是为一家不会 shell 花 5 美元买一个新键盘的公司工作:-)