两行代码解决拉勾面试

拉勾面试见这里
代码来源于这个代码分享中评论
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)]

分析

  1. str(i).find(str(a)) > -1判断i中是否包含第一个数。
    如果不包含则str(i).find(str(a))返回-1,式子值为False。False and 'Fizz' 值为False
    如果包含则返回非-1,式子值为True。 True and 'Fizz'值为Fizz
  2. '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是不是第二个第三个数的倍数同理
  3. 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

你可能感兴趣的:(两行代码解决拉勾面试)