拉勾面试见这里 代码来源于这个代码分享中评论 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假, 值为bless