標籤:orm RoCE 表示 return exce www. repr 編號 www
*********************************第一部分******************************************************************************************************************************************************************************************# 輸入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 = 0Z = (Z-A+1)*26^0 -1 = 25AA = (A-A+1)*26^1 + (A-A+1)*26^0 -1 = 26AZ = (A-A+1)*26^1 + (Z-A+1)*26^0 -1 = 51BA = (B-A+1)*26^1 + (A-A+1)*26^0 -1 = 52ZA = (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,1enumerate(list_char[::-1]反轉了列表,即[‘A‘,‘Z‘],目的是反轉索引 *********************************第三部分******************************************************************************************************************************************************************************************那麼,下面由這種方法,將十六進位輸出為十進位#!/usr/bin/env/python35# -*- coding:utf-8 -*-# author: Keekuun # 16進位就是逢16進1def distance(num1, num2):# 求與第一個數(0)的距離if ord(num1) >= 65:# 輸入的是A,B,C,D,E return ord(num1) - ord(num2) - 7else:# 輸入的是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)。
推論:
>>> 0b101010 # 也即python原生文法是支援二進位表示>> 0xff255 # 自然也支援八進位
向十進位轉換
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
python資料結構:進位轉化探索