在 Python 编程中,如何表示和操作不同进制的数字?请说明二进制、八进制、十进制和十六进制的字面量写法,以及如何在它们之间进行转换。
考察说明
考查对Python数字进制表示及转换的掌握程度。
回答思路
- 【回答框架 1】Python中数字字面量可通过前缀区分进制:二进制以0b或0B开头,八进制以0o或0O开头,十六进制以0x或0X开头,十进制无前缀。例如0b101表示5,0o17表示15,0x1F表示31。
- 【回答框架 2】内置函数int(str, base)可将指定进制的字符串转换为十进制整数,其中base取值范围为2到36,且字符串中不能包含前缀。例如int('101', 2)返回5,int('17', 8)返回15,int('1F', 16)返回31。
- 【回答框架 3】十进制整数转换为其他进制字符串可使用内置函数bin()、oct()、hex(),分别返回带0b、0o、0x前缀的字符串。例如bin(10)返回'0b1010',oct(10)返回'0o12',hex(255)返回'0xff'。
- 【回答框架 4】若需自定义进制转换,可结合除法取余法或使用循环实现,但一般不推荐,因为内置函数已覆盖常见需求。对于非标准进制如三进制,可用循环和字符串操作实现,但需注意负数和浮点数的处理。
- 【回答框架 5】格式化输出时,可使用format(value, 'b')、format(value, 'o')、format(value, 'x')等格式说明符,得到无前缀的字符串,便于字符串拼接或嵌入。例如format(10, 'b')返回'1010'。
- 【关键点 1】二进制用0b前缀,八进制用0o,十六进制用0x,十进制无前缀。
- 【关键点 2】int(str, base)可解析带base的字符串为十进制整数,字符串中不加前缀。
- 【关键点 3】bin()、oct()、hex()将十进制整数转为带前缀的字符串。
- 【关键点 4】format(value, '进制格式符')可生成无前缀的字符串。
- 【关键点 5】Python 3中八进制字面量必须使用0o前缀,0开头的写法已废弃。
- 【易错点 1】int()解析时若字符串包含前缀或非法字符会抛出ValueError,需确保字符串格式正确。
- 【易错点 2】浮点数无法直接用bin()等函数转换为二进制字符串,需先处理整数部分和小数部分。
- 【易错点 3】不同进制转换时注意大小写不影响数值,但输出默认使用小写字母如'a',若需大写可结合upper()方法。