python数据结构:进制转化探索

Posted 月上秦少

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据结构:进制转化探索相关的知识,希望对你有一定的参考价值。

*********************************第一部分*******************************************************************
***********************************************************************************************************************
# 输入excel的行号,输出对应列的序号(从0开始编号)
# 相当于:26进制用a-z表示,将其转化为10进制,即:输入a输出0,输入b输出1,输入aa输出26.。。。
strs = input(‘请输入1-2个字母组成的字符串:‘).lower()
list_char = list(strs)
sum = 0
 
def sub_str(str_a, str_b):
  return ord(str_a)-ord(str_b)
 
 
for index, str in enumerate(list_char[::-1]):
  sum += (sub_str(str, ‘a‘)+1) * 26 ** index
 
print(sum-1)
print(list_char[::-1])
 
*********************************第二部分*******************************************************************
***********************************************************************************************************************
题目解读:
即 A=0,Z=25
则Z-A=25
根据进制换算,得到以下公式:
A = (A-A+1)*26^0 -1 = 0
Z = (Z-A+1)*26^0 -1 = 25
AA = (A-A+1)*26^1 + (A-A+1)*26^0 -1 = 26
AZ = (A-A+1)*26^1 + (Z-A+1)*26^0 -1 = 51
BA = (B-A+1)*26^1 + (A-A+1)*26^0 -1 = 52
ZA = (Z-A+1)*26^1 + (A-A+1)*26^0 -1 = 26*26=676
...............
ZBFA = (Z-A+1)*26^3 + (B-A+1)*26^2 + (F-A+1)+26^1 + (A-A+)*26^0 -1
 
如果输入:ZA,那么list_char = [‘Z‘,‘A‘],索引为0,1
enumerate(list_char[::-1]反转了列表,即[‘A‘,‘Z‘],目的是反转索引
 
 
*********************************第三部分*******************************************************************
***********************************************************************************************************************
那么,下面由这种方法,将十六进制输出为十进制
#!/usr/bin/env/python35
# -*- coding:utf-8 -*-
# author: Keekuun
 
# 16进制就是逢16进1
def distance(num1, num2):
# 求与第一个数(0)的距离
if ord(num1) >= 65:
# 输入的是A,B,C,D,E
  return ord(num1) - ord(num2) - 7
else:
# 输入的是0-9
  return ord(num1) - ord(num2)
  
def sixteen_to_ten(num):
  result = 0
  for index, value in enumerate(num[::-1]):
# 分别将各个位数转化为10进制,然后求和
    result += distance(value, str(‘0‘)) * 16 ** index
  # print(‘result=%s‘%result)
  return result
 
num = list(input(‘请输入16进制数(不添加0x):‘).upper())
print(sixteen_to_ten(num))
 
 
*********************************第四部分**************************************************************************
***********************************************************************************************************************
  • 十进制:decimal system,每一位最高为9,达不到10

  • 二进制:binary system,每一位最高为1,达不到2

  • 八进制:octonary number system,每一位最高为7,达不到8

  • 十六进制:hexadecimal,每一位最高为 1515 或者 0xf0xf,取不到16(那就是0xG0xG了,:-D)。

推论:

  • 如果一个数为25,则它的进制不低于6进制;

  • 自然也可以这样理解,如果一个数的某一位的取值范围为 [0,m?1][0,m?1],则该数即为 mm进制;

>>> 0b1010
10 
            # 也即python原生语法是支持二进制表示
>> 0xff
255
            # 自然也支持八进制

向十进制转换

int(string, base)
            # 第一个参数标识:需要转换的原始的数据,以字符串的形式表示
            # 第二个参数标识:原始数据的base或者叫本身的进制表示
            # 2:二进制
            # 8:八进制
            # 16:表示16进制
            # 最终转化为十进制

 

二进制 ? 十进制

>>> int(‘1010‘, 2)
10

 

十六进制 ? 十进制

>>> int(‘f‘, 16)
15
>>> int(‘0xf‘, 16)
15
>>> int(‘0xff‘, 16)
255

 

八进制 ? 十进制

>>> int(‘17‘, 8)
15  
            # 15 = 7*8^0+1*8^1

 

向16进制转化

hex(string)
            # 也即没有进制的设置
            # 只接受10进制
            # 为实现其他进制的转换,可先转换为十进制使用int()
            # 返回位字符串类型
>>> hex(1033)
‘0x409‘

>>> hex(int(‘101010‘, 2))
‘0x2a‘

>>> hex(int(‘17‘, 8))
‘0xf‘

 

向二进制转换

bin(十进制整型)
>>> bin(10)
‘0b1010‘

>>> bin(int(‘ff‘,16))
‘0b11111111‘

>>> bin(int(‘17‘,8))
‘0b1111‘

向八进制转换

oct()
            # 不同于hex/bin
            # 通过参数进行判断
            # 其是二进制、十进制、16进制
            # 也即oct函数可将任意进制的数转换为8进制
>>> oct(0b1010)
‘012‘
>>> oct(11)
‘013‘
>>> oct(0xf)
‘017‘

向 m进制 的转换

不断的对m求模取余,余数为当前位(低位向高位),商新的被除数,支持商为0。

例,我们以十进制的25向3进制转换;

25/3 ? 8(1) 
8/3 ? 2(2) 
2/3 ? 0(2)

则25的三进制表示为 2211?30+2?31+2?32=251?30+2?31+2?32=25

def base(x, m):
    ms = []
    while x:
        ms.append(x%m)
        x //= m
                    # python 3
                    # //:表示整除,保留整数部分
                    // /:得float类型
    return ms
 


以上是关于python数据结构:进制转化探索的主要内容,如果未能解决你的问题,请参考以下文章

python怎样将16进制转化为2进制

Day 3 python入门拾遗篇:bytes和str转化;三元运算;进制转化

python如何将整数转化成二进制字符串

python整数转化为二进制

python怎么将字符串转化为八位二进制

python List与String 转化问题