1.进制转换
功能:获取十进制整数的二进制串,相当于内置函数bin。
算法分析:
- 对2辗转相除,直到商为0
- 每次所得余数逆序即可
流程图绘制
测试驱动,书写测试用例:
>>> convert(13)
'1101'
>>> convert(1)
'1'
>>> convert(0)
'0'
>>> convert(67)
'1000011'
>>> convert(15)
'1111'
代码实现:
def convert(n):
"""
添加上述测试用例
"""
s = ""
while n != 0:
r = n % 2
s = str(r) + s
n //= 2
return s
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
运行上述测试,可以看到0的二进制串没通过测试,原因是s默认为空串,因而传入0时得到的将是空串。我们可以在返回值时,使用三元运算符处理即可,return s if s != “” else “0”。
扩展:十进制转任意进制
- 进制:变化的是数码和基数
- 基数我们可以通过参数传入来解决
- 数码我们可以通过定义码元串来完成,然后通过索引访问即可
代码实现:
def convert(num, base):
"""
>>> convert(13, 2)
'1101'
>>> convert(23, 16)
'17'
>>> convert(23, 8)
'27'
>>> convert(30, 16)
'1E'
"""
codes = "0123456789ABCDEF"
s = ""
while num != 0:
r = num % base
s = codes[r] + s
num //= base
return s if s != "" else "0"
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
2.字符串加密的实现
功能:对英文串进行加密,规则英文字母循环右移n位,不失一般性,此处n设为3
算法分析:
- chr,根据ASCII码获取字符;ord,获取字母的ASCII码
- 循环右移,即越界翻转,z完后再到a,即(ord(ch) + 3 - 0x61) % 26 + 0x61。
流程图绘制
测试先行:
>>> encrypt("abc")
'def'
>>> encrypt