在学习 Python 时,我一直在摆弄一些不同的 fizz buzz 脚本。我遇到了这个效果很好但我无法理解它是如何工作的。我知道正常的嘶嘶声如何与 for 循环和“if i % 3 == 0 and i % 5 == 0”一起工作。让我感到困惑的是如何“嘶嘶声”(不是 i%3)+“Buzz”(不是 i%5)” 有效。
x = ["Fizz"*(not i%3) + "Buzz"*(not i%5) or i for i in range(1, 100)]
请您参考如下方法:
在 python 中,您可以使用乘法运算符复制字符串:
print('aaa' * 3) # aaaaaaaaa
此外, bool 值在乘法时被隐式转换为整数。因此,如果你这样做
"Fizz"*(not i%3)
首先,i%3 将返回取模的结果。然后,如果结果为 0,not 运算符会将其转换为 True,否则为 False(通过将其转换为 bool 值,然后取反值)。然后应用乘法运算符,False 变为 0,True 变为 1。
因此,如果数字可以被 3 整除,我们得到 0 作为模的结果,当应用 not 时为 True,当相乘时为 1,并且字符串 Fizz 作为乘法的结果复制了 1 次。如果它不可整除,我们得到 0 作为乘法的操作数,有效地将字符串 Fizz 复制 0 次,因此是一个空字符串。
Buzz 也是如此,范围内每个 i 的结果只是两者的串联。
