当我学习 python 时,我正在摆弄一些不同的 fizzuzz 脚本。我发现这个效果很好,但我无法破译它是如何工作的。我知道正常的嘶嘶声如何与 for 循环和“if i % 3 == 0 and i % 5 == 0”一起工作。让我困惑的是如何"Fizz"(not i%3) + "Buzz"(不是我%5)” works.
x = ["Fizz"*(not i%3) + "Buzz"*(not i%5) or i for i in range(1, 100)]
在 python 中,您可以使用乘法运算符复制字符串:
print('aaa' * 3) # aaaaaaaaa
此外,布尔值在乘法时隐式转换为整数。因此,如果你这样做
"Fizz"*(not i%3)
首先,i%3 将返回模数的结果。然后,not
运算符会将其转换为True
如果结果为 0,或者False
否则(通过将其转换为布尔值,然后否定该值)。然后应用乘法运算符,False
变为 0 且True
变成 1。
因此,如果该数字能被 3 整除,我们会得到 0 作为模数的结果,True
申请时not
, 相乘时为 1,字符串Fizz
复制1次作为乘法的结果。如果它不可整除,我们得到 0 作为乘法的操作数,有效地得到字符串Fizz
复制了 0 次,因此是一个空字符串。
同样适用于Buzz
,以及每个结果i
范围内只是两者的串联。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)