打印最大值(str(i),“”+(i%3==0)*'Fizz'+(i%5==0)*'Buzz')

2024-06-17 11:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解下面几行代码是如何产生输出的,有人能解释一下吗?你知道吗

我不是想解决这个问题,也不是想知道如何产生所需的输出。我只是想了解别人提供的这个解决方案是如何工作的。你知道吗

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: 代码inforrange数字解决方案maxprint
1条回答
网友
1楼 · 发布于 2024-06-17 11:41:20
max('18', 'Fizz')
# => 'Fizz'
max('19', '')
# => '19'

根据每个字符的Unicode顺序,按字典顺序对字符串进行比较。由于数字09在Unicode顺序上都早于大写字母FB,因此,例如'18' > 'Fizz'就是False。然而,根据字典顺序的定义,空字符串排在第一位;因此'19' > ''True。所以每当我们有一个'Fizz'、一个'Buzz'或一个'FizzBuzz'时,这就是max挑选的字符串;如果我们没有,并且有一个空字符串,那么我们就从max中得到str(i)。你知道吗

int(True)
# => 1
int(False)
# => 0
18 % 3 == 0
# => True
19 % 3 == 0
# => False
'' + 1 * 'Fizz' + 1 * 'Buzz'
# => 'FizzBuzz'
'' + 0 * 'Fizz' + 0 * 'Buzz'
# => ''

我们怎么才能得到一个'Fizz',一个'Buzz'或者一个'FizzBuzz'i % 3 == 0True表示可以被3整除的数。True在Python中,如果强制为数字,则为1'Fizz' * 1给出一个'Fizz'的重复('Fizz' * 3将产生FizzFizzFizz)。另一方面,对于不能完全被3整除的数,False强制为0;零次'Fizz'是空字符串。如果我们有一个可以被35完全整除的数,我们得到'' + 'Fizz' + 'Buzz'作为字符串。你知道吗

相关问题 更多 >