第一部分******************************************************************* 
 
 
 

   *********************************************************************************************************************** 
 
 
 

   # 输入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的三进制表示为 221,1⋅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