我很难理解下面几行代码是如何产生输出的,有人能解释一下吗?你知道吗
我不是想解决这个问题,也不是想知道如何产生所需的输出。我只是想了解别人提供的这个解决方案是如何工作的。你知道吗
for i in range(1,101):
print max(str(i),''+(i%3==0)*'Fizz'+(i%5==0)*'Buzz')
预期的输出是在新行上打印从1到100的每个数字,但是当数字是3的倍数时打印Fizz,当数字是5的倍数时打印Buzz,或者当输出是3和5的倍数时打印FizzBuzz
Tags:
根据每个字符的Unicode顺序,按字典顺序对字符串进行比较。由于数字
0
到9
在Unicode顺序上都早于大写字母F
和B
,因此,例如'18' > 'Fizz'
就是False
。然而,根据字典顺序的定义,空字符串排在第一位;因此'19' > ''
是True
。所以每当我们有一个'Fizz'
、一个'Buzz'
或一个'FizzBuzz'
时,这就是max
挑选的字符串;如果我们没有,并且有一个空字符串,那么我们就从max
中得到str(i)
。你知道吗我们怎么才能得到一个
'Fizz'
,一个'Buzz'
或者一个'FizzBuzz'
?i % 3 == 0
是True
表示可以被3整除的数。True
在Python中,如果强制为数字,则为1
。'Fizz' * 1
给出一个'Fizz'
的重复('Fizz' * 3
将产生FizzFizzFizz
)。另一方面,对于不能完全被3整除的数,False
强制为0
;零次'Fizz'
是空字符串。如果我们有一个可以被3
和5
完全整除的数,我们得到'' + 'Fizz' + 'Buzz'
作为字符串。你知道吗相关问题 更多 >
编程相关推荐