拉勾面试见这里 代码来源于这个代码分享中评论 a, b, c = [int(x) for x in raw_input("3 numbers less than 10").split(', ')] [str(i).find(str(a)) > -1 and 'Fizz' or 'Fizz'[i % a * 4 : ] + 'Buzz'[i % b * 4 : ] + 'Whizz'[i % c * 5 : ] or i for i in range(1, 101)]
分析
- str(i).find(str(a)) > -1判断i中是否包含第一个数。 如果不包含则str(i).find(str(a))返回-1,式子值为False。False and 'Fizz' 值为False 如果包含则返回非-1,式子值为True。 True and 'Fizz'值为Fizz
- 'Fizz'[i % a * 4 : ] + 'Buzz'[i % b * 4 : ] + 'Whizz'[i % c * 5 : ]判断i是否是第一个,第二个,第三个数的倍数 如果i是第一个数的倍数则,i % a * 4 = 0。 'Fizz'[0 :]值为Fizz 如果i不是第一个数的倍数则,i % a * 4 >= 4。 'Fizz'[i % a * 4 : ]为一个空字符串, '' i是不是第二个第三个数的倍数同理
- i for i in range(1, 101),当前面两个条件都不满足时直接输出i
这里明白Python中and和or的运算结果
a and b 如果a真,值为b 如果a假,值为a a or b 如果a真, 值为a 如果a假, 值为b