*********************************第一部分*******************************************************************
***********************************************************************************************************************
# 输入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
 

python数据结构:进制转化探索的更多相关文章

  1. python 实现进制转换(二进制转十进制)

    摘自https://baike.baidu.com/item/%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E4%BA%8C%E8%BF%9B%E5%88%B6 pytho ...

  2. 【风马一族_C】进制转化

    #include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...

  3. python任意进制转换

    python任意进制转换 import string def module_n_converter(q, s, base=None): """ 将自然数按照给定的字符串转 ...

  4. c语言进制转化

    #include <stdio.h> // 进制转化 int main(void) { ; ; int i3 = 0x32C; printf( printf( printf("十 ...

  5. 编码/解码和进制转化工具hURL

    编码/解码和进制转化工具hURL   在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Li ...

  6. HDU5050:Divided Land(大数的进制转化与GCD)

    题意:给定大数A和B,求gcd.所有数字都是二进制. 思路:先输入字符串,再转化为大数,然后用大数的gcd函数,最后转化为字符串输出. 利用字符串和大数转化的时候可以声明进制,就很舒服的完成了进制转化 ...

  7. python实现进制转换(二、八、十六进制;十进制)

    python实现进制转换(二.八.十六进制:十进制) (一)十进制整数转为二.八.十六进制 1.format实现转换>>> format(2,"b") # (10 ...

  8. Python中进制转换函数的使用

    Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...

  9. 《N诺机试指南》(五)进制转化

    进制转化类题目类型: 代码详解及注释解答:  //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...

随机推荐

  1. 一双木棋(chess)

    一双木棋(chess) 题目描述 菲菲和牛牛在一块 nn 行 mm 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束.落子的规 ...

  2. [CSP-S模拟测试]:树(树形DP+期望)

    题目描述 梦游中的你来到了一棵$N$个节点的树上.你一共做了$Q$个梦,每个梦需要你从点$u$走到点$v$之后才能苏醒,由于你正在梦游,所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  3. 纯CSS 常见3D实例

    一.正方体 我认为正方体可以算是3D图像的基础吧,首先正方体是由六个相同的面所组成,其次就需要我们依次构造.(据体构造在代码中)成平图如下: 代码如下: <!DOCTYPE html> & ...

  4. html标签<td><tr><th>全称及缩写说明

    <td> 是table data cell 的缩写,单元格 <tr> 是table row 的缩写,表格中的一行 <th> 是table header cell 的 ...

  5. anti-nim 游戏

    游戏描述: 桌上有n堆石子,游戏双方轮流取石子,每次只能从一堆中取出任意数目的石子,不能不取,取走最后一个石子者失败. 结论: 先手必胜,当且仅当: ①.所有堆的石子数都为1,且游戏的SG值为0. ② ...

  6. Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest

    解决办法: 删除对应的jar 包下的文件 zip -d *.jar META-INF/*.RSA META-INF/*.SF

  7. <读书笔记>《锋利的jQuery》

    2016年4月3日 第4章 jq中的事件和动画 4.1 jq中的事件 (1)window.onload.$(documet).ready()的区别: 1.执行时机:window.onload需要整个页 ...

  8. HTML 列表中的dl,dt,dd,ul,li,ol区别

    1.无序列表 无序列表是一个项目的列表,此列项目使用粗体圆点(典型的小黑圆圈)进行标记. 无序列表始于 <ul> 标签.每个列表项始于 <li>. 2.有序列表 同样,有序列表 ...

  9. QTP 通过URL地址下载文件到本地(转)

    While automation, you may come to situations where you need to need to download a file on clicking a ...

  10. Visual Assist 10.9.2248 破解版(支持VS2017) 转载

    自己在Windows10下同时安装了VS2017和VS2013,先装的VS2017和Visual Assist,后装的VS2013,发现VS2013中没显示Visual Assist,Google了一 ...