用一行代码实现判断一个数是否是2的n次方

昨天晚上一个朋友问我如何用一行代码判断一个数是否是2的次方数,本来我想用列表生成式去写的,没怼出来(可能是思路不对),然后选择了其他的方法

运行环境:python 3.6.0

方法一:

这是我自己想出来的方法,在这里要借助内置的 math 库的 log方法

import math
n = int(input('>>> '))
print('Yes') if math.log(n, 2) == int(math.log(n, 2)) else print('No')

方法二:

这是我那个同学的思路,但是他没搞出来,他的思路就是用转化成二进制去判断,然后我帮他搞出来了

n = int(input('>>> '))
print(tuple(bin(n))[2:].count('0') == len(tuple(bin(n))[2:])-1)

方法三:

这是我今天早上看见了另外一个同学的朋友圈,他是这么些的

num = int(input())
((num&(num-1)) or print('是2的n次方')) and print('不是2的n次方')

然后我受他的代码启发,写出了如下自我认为更简短的代码

n = int(input('>>> '))
print('No') if n & (n-1) else print('Yes')

哈哈哈,果然是人多办法多,hahaha...

扫描二维码关注公众号,回复: 6050309 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_39377418/article/details/89278395