Skip to main content
 首页 » 编程设计

python之FizzBuzz 列表理解

2025年05月04日14lautakyan007

在学习 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 的结果只是两者的串联。