python数据结构:进制转化探索

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

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

# 输入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

原文地址:https://www.cnblogs.com/zkkysqs/p/9175209.html

时间: 2024-10-24 07:27:06

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

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 python实现进制转换:https://www.cnblogs.com/cookie1026/p/6059766.html 十进制转二进制 编辑 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法.具体做法是:用2整除十进制整数,可以得到一个商和余数:再用2去

c语言进制转化

#include <stdio.h> // 进制转化 int main(void) { int i1 = 12; int i2 = 88; int i3 = 0x32C; printf("八进制输出i1 = %o\n", i1); // 14 printf("十六进制输出i2 = %x\n", i2); // 58 printf("十六进制输出i3 = %x\n", i3); // 32c printf("十进制输出i3 =

Python的进制等转换

To 十进制 二进制: >>> int('110', 2) -> 6 八进制: >>> int('10', 8) -> 8 十六进制: >>> int('10', 16) -> 16 >>> int('1A', 16) -> 26 To 十六进制: 十进制: >>> hex(12) -> ‘0xc’ 二进制: >>> hex(0b100) -> ‘0x4’ 八进制

Java Integer 进制转化的实现(附源码),对模与补码的理解

1.toBinaryString方法的实现 1 public static String toBinaryString(int i) { 2 return toUnsignedString0(i, 1); 3 } 4 private static String toUnsignedString0(int val, int shift) { 5 // assert shift > 0 && shift <=5 : "Illegal shift value";

栈的应用之进制转化

顺序栈的代码: 不再赘述:点击打开链接 //栈的应用-----进制转化 #include"stack.h" int main() { Stack st; InitStack(&st); int select; int num1; //要转化的数 int num2; //转化之后各个位的数 int flag = 1; //控制循环结束 while(flag) { cout<<"****************进制转换*****************&quo

计算机基础知识_进制转化

进制转化 一.任何一个进制转化为10进制的方式 156的十进制可以看做1*10^2 + 5*10^1  +   6*10^0 首先我们看一下156 ,平方,次方等等都是根据后面有多少位决定的,如果用计算机计算,则正好是156 33是一个八进制可以看做3*8^1+3*8^0 次方  换算出来就是10进制 如果你本身是x进制,那么你的数字就看做  num * x^位数  比如我有一个16进制的数字,转为10进制 16进制在计算机中表示方法: 1 2 3 4 5 6 7 8 9 a b c d e f

标识符,进制转化,原反补码等

标识符 Java对包.类.方法.参数.变量等要素命名时使用的字符序列. 规则:***** 1.由字母(含中.英.日.俄等).数字.下划线_和美元符号$组成. 2.不能以数字开头   int 123a=1; 3.区分大小写  int a=1和int A=1是不一样的. 4.长度无限制.(一般编程长度不超过15个字符) 5.不能是Java中的保留字和关键字    int class="1"    int ainta=1 保留字和关键字都有哪些?我们知道以后应该避开它们. 标识符命名习惯:*

Python中进制转换函数的使用

Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到二进制).oct()(十进制转换到八进制).hex()(十进制转换到十六进制). 下面我们逐个说下每个函数的用法. bin bin()函数,是将十进制的数字转换成二进制的数字.其中bin()函数中传入的是十进制的数字,数据类型为数字类型. v = 18 num = bin(v) print(num)

Day 3 python入门拾遗篇:bytes和str转化;三元运算;进制转化

pre.ctl { font-family: "Liberation Mono", monospace } p { margin-bottom: 0.25cm; line-height: 120% } 1.bytes类型 Python3中一个很重要的特性就是对文本和二进制数据做了较为明显的划分. 文本:Unicode,由str类型表示. 二进制数据:bytes类型表示.电影文件.音频文件都由二进制文件存储. bytes类型和str类型相互转化: string------>byte