我想将包含if
,elif
和else
的基于循环的脚本转换为列表理解,但是我不知道该怎么做。
这是我编写的脚本(它打印从1到100的数字,但是对于3的倍数,它会打印“嘶嘶声”;对于5的倍数,它会打印“嗡嗡声”,对于3和5的倍数,它会打印“嗡嗡声”。 fizzbuzz'):
for num in range(1, 101):
if num % 3 == 0 and num % 5 == 0:
print('fizzbuzz')
elif num % 3 == 0:
print('fizz')
elif num % 5 ==0:
print('buzz')
else:
print(num)
答案 0 :(得分:1)
列表理解不是正确的工具,因为您想做某事
(print
),而不要生成列表。
首先,您应该用一个函数替换“ switch”:
def foobar(num):
if num % 3 == 0 and num % 5 == 0:
return 'fizzbuzz'
elif num % 3 == 0:
return 'fizz'
elif num % 5 ==0:
return 'buzz'
else:
return str(num) # return a string to have a consistent return type
(如果需要,您可以像@EnzoBnl的回答中那样使此函数成为一个衬里,但这不是一个好主意。)现在,您的代码如下:
for num in range(1, 101):
print(foobar(num))
如果您想要列表理解(此处为生成器),请使用:
print("\n".join(foobar(num) for num in range(1, 101)))
答案 1 :(得分:0)
您不能在列表理解中使用elif
,因为它不是 if-else 短表达式语法的一部分。
但是您可以通过链接获得相同的逻辑:
if b1:
a
elif b2:
b
else:
c
成为
a if b1 else b if b2 else c
所以这可以为您解决问题:
[print('fizzbuzz') if num %3 == 0 and num%5 == 0 else print('fizz') if num%3 == 0 else print('buzz') if num%5 ==0 else print(num) for num in range(1, 101)]
注意:完全不建议在现实生活中的项目中使用这种难以理解的列表理解!