两行代码解决拉勾面试

本文解析了一段Python代码,该代码实现了一个FIZZBUZZ的变种游戏,不仅检查数字是否为特定数字的倍数,还检查数字是否包含特定数字。文章详细解释了代码的运行逻辑及Python中and和or运算符的使用。

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

转载于:https://my.oschina.net/alazyer/blog/260921

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值