我有一个清单a,
a = ['python', 'django', 'python with django']
我想做的是,
如果数字可被3整除,则打印'python'
如果数字可被5整除,则打印'django'
如果数字可以被3和5整除,则打印'python with django'
这是我的代码
for n, i in enumerate(range(20)):
if i % 3 == 0:
print n, a[0]
elif i % 5 == 0:
print n, a[1]
elif i % 3 == 0 and i % 5 == 0:
print n, a[2]
和 O / P
0 python
3 python
5 django
6 python
9 python
10 django
12 python
15 python
18 python
我需要此结果
0 python with django
3 python
5 django
6 python
9 python
10 django
12 python
15 python with django
18 python
我可以使用列表理解还是有任何pythonic方式
提前致谢。
答案 0 :(得分:1)
你的方式似乎很好,但你的代码有点不正确。这是正确的代码:
for n, i in enumerate(range(20)):
if i % 3 == 0 and i % 5 == 0:
print n, a[2]
elif i % 3 == 0:
print n, a[0]
elif i % 5 == 0:
print n, a[1]
您必须先检查数字是否可以被3和5整除。如果你没有,它可以被3整除,它符合第一个if
语句的条件,所以它不会检查任何elif
语句,因为elif
只会被检查之前的if
或elif
语句未得到满足。如果数字可被5整除,则同样如此。
答案 1 :(得分:0)
在这种情况下,列表理解可能最终看起来过于复杂。只需将三个条件中的最后一个移到顶部即可。否则,如果一个数字可以除以3和5,那么单独检查可以被3整除,而elif
链意味着永远不会达到组合检查。顺便说一句,您无需枚举迭代的范围,只需使用i
代替n
。
为了使代码更简洁(但也不那么简单),你可以减少一张支票:
for i in range(20):
if i % 3 == 0:
if i % 5 == 0:
print i, a[2]
else:
print i, a[0]
elif i % 5 == 0 :
print i, a[1]
答案 2 :(得分:0)
这应解决您的FizzBuzz任务。
a = ['python with django' if x%15 == 0 else ('python' if x%3 == 0 else 'django') for x in xrange(20)]