*********************************第一部分*******************************************************************
***********************************************************************************************************************
# 输入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. python中的单例模式及其实现

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在. 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如, ...

  2. django中常见命令总结

    一,创建一个django项目: django-admin.py startproject mysite二,在mysite目录下创建blog应用: python manage.py startapp b ...

  3. java并发编程笔记(九)——多线程并发最佳实践

    java并发编程笔记(九)--多线程并发最佳实践 使用本地变量 使用不可变类 最小化锁的作用域范围 使用线程池Executor,而不是直接new Thread执行 宁可使用同步也不要使用线程的wait ...

  4. MySQL查询上一条记录和下一条记录

    如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...

  5. python中%代表什么意思?

    http://zhidao.baidu.com/link?url=MQLeRPckNfavTJYvMQbVj_pdNn5SSadtFvfEk7nNCusPcPW4T1O45esIuttuBW3EnSB ...

  6. swoole 多进程共享数据

    进程作为程序执行过程中资源分配的基本单位,拥有独立的地址空间,同一进程的线程可以共享本进程的全局变量,静态变量等数据和地址空间,但进程之间资源相互独立.由于PHP语言不支持多线程,因此Swoole使用 ...

  7. C++中的多重继承(二)

    1,本文分析另一个多重继承问题及其工程中的解决方案,单继承加多接口实现的开发方式: 2,多重继承的问题三: 1,多重继承可能产生多个虚函数表: 1,实际工程中可能造成不可思议的问题,并且这些问题很难以 ...

  8. python基础----以面向对象的思想编写游戏技能系统

    1. 许多程序员对面向对象的思想都很了解,并且也能说得头头是道,但是在工作运用中却用的并不顺手. 当然,我也是其中之一. 不过最近我听了我们老师的讲课,对于面向对象的思想有了更深的理解,今天决定用一个 ...

  9. html/js部分问题和小结

    2015/9/8 1.js中不要试图去处理由[变量:变量]组成的map(不过可以通过DWR.addOptions添加),而是处理[bh:变量][xm:变量],然后通过data[i].bh,data[i ...

  10. python3 requests库学习笔记(MOOC网)

    奏:HTTP协议对资源的操作 方法说明:GET 请求获取URL位置的资源HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息POST 请求向URL位置的资源后附加新的数据PUT 请求 ...