python数据结构:进制转化探索
生活随笔
收集整理的這篇文章主要介紹了
python数据结构:进制转化探索
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
*********************************第一部分******************************************************************* *********************************************************************************************************************** # 輸入excel的行號,輸出對應(yīng)列的序號(從0開始編號) # 相當于:26進制用a-z表示,將其轉(zhuǎn)化為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 根據(jù)進制換算,得到以下公式: 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]反轉(zhuǎn)了列表,即['A','Z'],目的是反轉(zhuǎn)索引 *********************************第三部分******************************************************************* *********************************************************************************************************************** 那么,下面由這種方法,將十六進制輸出為十進制 #!/usr/bin/env/python35 # -*- coding:utf-8 -*- # author: Keekuun # 16進制就是逢16進1 def distance(num1, num2): # 求與第一個數(shù)(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]): # 分別將各個位數(shù)轉(zhuǎn)化為10進制,然后求和 result += distance(value, str('0')) * 16 ** index # print('result=%s'%result) return result num = list(input('請輸入16進制數(shù)(不添加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)。
推論:
-
如果一個數(shù)為25,則它的進制不低于6進制;
-
自然也可以這樣理解,如果一個數(shù)的某一位的取值范圍為?[0,m?1][0,m?1],則該數(shù)即為?mm進制;
向十進制轉(zhuǎn)換
int(string, base)# 第一個參數(shù)標識:需要轉(zhuǎn)換的原始的數(shù)據(jù),以字符串的形式表示# 第二個參數(shù)標識:原始數(shù)據(jù)的base或者叫本身的進制表示 # 2:二進制 # 8:八進制 # 16:表示16進制 # 最終轉(zhuǎn)化為十進制?
二進制 ? 十進制
>>> 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進制轉(zhuǎn)化
hex(string)# 也即沒有進制的設(shè)置# 只接受10進制# 為實現(xiàn)其他進制的轉(zhuǎn)換,可先轉(zhuǎn)換為十進制使用int()# 返回位字符串類型 >>> hex(1033) '0x409'>>> hex(int('101010', 2)) '0x2a' >>> hex(int('17', 8)) '0xf'?
向二進制轉(zhuǎn)換
bin(十進制整型) >>> bin(10) '0b1010'>>> bin(int('ff',16)) '0b11111111' >>> bin(int('17',8)) '0b1111'向八進制轉(zhuǎn)換
oct()# 不同于hex/bin# 通過參數(shù)進行判斷# 其是二進制、十進制、16進制# 也即oct函數(shù)可將任意進制的數(shù)轉(zhuǎn)換為8進制 >>> oct(0b1010) '012' >>> oct(11) '013' >>> oct(0xf) '017'向?m進制?的轉(zhuǎn)換
不斷的對m求模取余,余數(shù)為當前位(低位向高位),商新的被除數(shù),支持商為0。
例,我們以十進制的25向3進制轉(zhuǎn)換;
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 # //:表示整除,保留整數(shù)部分 // /:得float類型 return ms轉(zhuǎn)載于:https://www.cnblogs.com/zkkysqs/p/9175209.html
總結(jié)
以上是生活随笔為你收集整理的python数据结构:进制转化探索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷过山车多少米
- 下一篇: 新乡看多囊卵巢综合症最好的医院推荐