Python每日一练
问题:
编写一个程序来计算整数的二进制表示中1的个数。
定义函数count_binary_ones(),参数为数字num。
在函数内,将数字转换为其二进制表示,并计算“1”的个数。
题目来源:PythonTip
https://edu.py2fun.com/
代码实现
代码如下(示例):
def count_binary_ones(num):
# 此处写你的代码
numbers = [] # 利用除2取余法,把二进制数字保存到列表中
while num != 0:
numbers.append(num % 2)
num = num // 2
counts = 0 # 统计列表中1出现的次数
for i in numbers:
if i == 1:
counts += 1
return counts
# 从标准输入读取一个整数
num = int(input())
# 调用函数
print(count_binary_ones(num))
示例输入:
11
示例输出:
3
总结
十进制转二进制采用“除2取余,逆序排列”法。
例如:把十进制11转二进制步骤如下:
第一步:11除以2=5 余1
第二步:5除以2=2 余1
第三步:2除以2=1 余0
第四步:1除以2=0 余1
结论:把余数逆序排列,11的二进制为1011。
由于题目只统计“1”出现的次数,因此上述代码并没有进行逆序操作,在总结中我们重新实现一下十进制转二进制的操作:
代码如下(示例):
input_num = 11
num = input_num
numbers = []
while num != 0:
numbers.append(num % 2)
num = num // 2
binary = 0
for i in range(len(numbers)):
binary += numbers[i] * (10 ** i)
print("{}的二进制为:{}".format(input_num,binary))
示例输入:
11
示例输出:
11的二进制为:1011
实际上利用Python某些内置函数的话,题目要求更容易实现,但是每日一练的初心就是为了熟悉Python的语法结构与数据类型特点,我们尽量去用最基础的语法实现一些功能。
这里我们也顺带利用内置函数实现一下上述问题:
代码如下(示例):
def count_binary_ones(num):
# 此处写你的代码
binary = bin(num) # bin()函数可以返回整数型的二进制字符串形式
counts = binary.count("1") # srting.count()方法可以返回某字符出现在该字符串的次数
return counts
# 从标准输入读取一个整数
num = int(input())
# 调用函数
print(count_binary_ones(num))
示例输入:
11
示例输出:
3