目 录CONTENT

文章目录

Python-进制转换

~梓
2025-03-03 / 0 评论 / 0 点赞 / 26 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、十进制是怎么转四进制的?

十进制转换四进制的步骤类似于 十进制转二进制,采用除 4 取余法

🔢 转换方法

  1. 不断用 4 除当前数字,记录 余数
  2. 把所有余数逆序排列,就是最终的四进制数。

📌 手算示例

示例 1:十进制 45 转四进制

45 ÷ 4 = 11 余 1  
11 ÷ 4 = 2  余 3  
 2 ÷ 4 = 0  余 2  (商变 0,停止)

👉 结果 **231(四进制)**

示例 2:十进制 100 转四进制

100 ÷ 4 = 25  余 0  
 25 ÷ 4 = 6   余 1  
  6 ÷ 4 = 1   余 2  
  1 ÷ 4 = 0   余 1  (商变 0,停止)

👉 结果 **1210(四进制)**

🐍 Python 代码

方法 1:手写转换

def to_base4(n):
    if n == 0:
        return '0'  # 0 的四进制就是 '0'
  
    result = ''
    while n > 0:
        result = str(n % 4) + result  # 取余数,并放在前面
        n //= 4  # 整除,继续计算
  
    return result

# 测试
print(to_base4(45))   # 输出 '231'
print(to_base4(100))  # 输出 '1210'
print(to_base4(7))    # 输出 '13'

Python 没有 内置的 format(n, 'q')(四进制转换),但可以用 oct() 处理八进制、hex() 处理十六进制。


✅ 结论

  • 手算方法:除 4 取余,倒序排列余数
  • Python 代码:
    • 迭代版:使用 while 计算余数
    • 递归版:更简洁,但适合小数
  • 不能用 format(n, 'o'),因为 o 代表八进制!
进制 正确写法
二进制 format(n, 'b')
四进制 to_base4(n)(需手写)
八进制 format(n, 'o')
十六进制 format(n, 'x')

在 Python 里,大部分常见进制的数转换为十进制数时,都能够使用 int() 函数来实现,但需要满足一定的条件。下面为你详细介绍:

可以使用 int() 函数的情况

int() 函数的基本语法是 int(x, base=10),这里的 x 通常是字符串类型,base 表示 x 所代表数字的进制,取值范围是 2 到 36 之间的整数。这意味着当要转换的数是用 2 到 36 进制表示,并且以字符串形式呈现时,就可以使用 int() 函数转换为十进制数。

 # 二进制转十进制
 binary_num = "1010"
 decimal_num1 = int(binary_num, base=2)
 print(f"二进制数 {binary_num} 转换为十进制是: {decimal_num1}")
 ​
 # 八进制转十进制
 octal_num = "25"
 decimal_num2 = int(octal_num, base=8)
 print(f"八进制数 {octal_num} 转换为十进制是: {decimal_num2}")
 ​
 # 十六进制转十进制
 hexadecimal_num = "1F"
 decimal_num3 = int(hexadecimal_num, base=16)
 print(f"十六进制数 {hexadecimal_num} 转换为十进制是: {decimal_num3}")

代码解释

  • 二进制转十进制:将二进制字符串 "1010" 按照 2 进制转换为十进制数。
  • 八进制转十进制:把八进制字符串 "25" 按照 8 进制转换为十进制数。
  • 十六进制转十进制:将十六进制字符串 "1F" 按照 16 进制转换为十进制数。

限制条件

  • base 的取值范围base 必须是 2 到 36 之间的整数。这是因为在 36 进制及以内,能够使用 0 - 9 和 a - z(或 A - Z)来表示各个数位的值。超过 36 进制时,就没有足够的字符来表示每个数位了。
  • 输入必须是有效的字符串:输入的字符串必须是对应进制下的有效表示。例如,在二进制中只能包含 01,在八进制中只能包含 0 - 7 等。若输入不符合要求,就会抛出 ValueError 异常。
 try:
     # 无效的二进制数,包含非 0 和 1 的字符
     invalid_binary = "1020"
     result = int(invalid_binary, base=2)
 except ValueError as e:
     print(f"出现错误: {e}")

特殊情况

对于像 64 进制这种超出 int() 函数 base 取值范围的进制转换,int() 函数就不适用了,此时需要借助自定义的转换函数或者使用第三方库来实现。

0

评论区