【趣学Python算法100例】数制转换

news2024/11/16 10:48:56

问题描述

给定一个M进制的数x,实现对x向任意一个非M进制的数的转换。

问题分析

要搞定这道题,关键在于学会不同数制之间的转换,主要是二进制、八进制、十六进制和十进制这几种。理解下面这几个概念非常重要:

  • 基数:就是在一个数制里能用的数字数量。比如,十进制就有10个数字(0到9),所以基数是10;二进制只有2个数字(0和1),基数就是2。
  • :每个数位上的数字代表的值的大小不一样,这就是权。在十进制里,个位的权是1(10的0次方),十位的权是10(10的1次方),依此类推。对一个M进制的数,数位从左到右的权分别是M的0次方、1次方、2次方…,小数点右边则是M的-1次方、-2次方这样减下去。
    转换方法简单说:
  • 从二进制、八进制、十六进制转到十进制,就是每个位上的数乘以它的权,然后全部加起来。
  • 十进制转成二进制、八进制或十六进制,整数部分不断除以基数取余数,从低位到高位;小数部分则是乘基数取整数,从高位到低位。
  • 二进制、八进制、十六进制之间转换,可以先转成十进制做中转,也可以直接根据它们之间的对应关系转换(比如,3个二进制位变成1个八进制位,4个二进制位变成1个十六进制位)。

算法设计

十六进制呢,就是用0到9还有A到F这些符号表示的,所以我们用一个专门放字符的数组来存它们。当你往里加数或者取数的时候,看起来都是一些字符,但是要换成别的进制时,这些字符就又要当作数字来用了。为了能在字符和它们代表的数字之间随便转换,我们做了设计两个自定义函数,一个叫char_to_number(),另一个是number_to_char()

我们想测验程序准不准确,通常会一次次重新跑程序,每次给不同的数。但现在咱们改一改,让程序一次性运行,但能接受好几组数据来检查。这个不难,加个圈圈(循环)就行,只要满足某个条件,就一直让你输数据;不符合了,就停止输入。这个条件就是看一个表达式的结果是不是0,我们用个叫flag的变量来帮忙,规则是这样的:“只要flag是1,你就继续输;变成0了,就不让输了,循环结束。”
简单来说,就是加个循环,用flag控制,flag为1就继续,为0就停。

完成代码

#!/usr/bin/python3
# -*- coding: utf-8 -*- 
# @author : liuhefei 
# @desc: 数制转换

# 将字符转换成数字
def char_to_num(ch):
    if ch >= '0' and ch <= '9':
        return int(ch)                              # 将数字字符转换成数字
    else:
        return ord(ch)                              # 将字母字符转换成数字


# 将数字转换为字符
def num_to_char(num):
    if num >= 0 and num <= 9:
        return str(num)                     # 将0~9之间的数字转换成字符
    else:
        return chr(num)                     # 将大于10的数字转换成字符


# 其他数制转换为十进制
def source_to_decimal(temp, source):
    decimal_num = 0                                 # 存储展开之后的和

    for i in range(len(temp)):      # 累加
        decimal_num=(decimal_num * source)+char_to_num(temp[i])

    return decimal_num


# 十进制转换为其他数制
def decimal_to_object(decimal_num, object):
    decimal = []
    while decimal_num:
        # 求出余数并转换为字符
        decimal.append(num_to_char(decimal_num % object))
        decimal_num //= object              # 用十进制数除以基数

    return decimal


# 修改余数数制
def output(decimal):
    f = len(decimal)-1
    while f >= 0:
        print(decimal[f], end='')
        f -= 1
    print()

if __name__ == '__main__':
    MAXCHAR = 101                                   # 允许的最大字符串长度
    flag = 1                                                # 存储是否退出程序的标志
    while flag:                                     # 利用输入的flag值控制循环是否结束
        print("转换前的数是:", end='')
        temp= input()
        print("转换前的数制是:", end='')
        source = int(input())
        print("转换后的数制是:", end='')
        object = int(input())
        print("转换后的数是:", end=’’)
        decimal_num = source_to_decimal(temp, source)
        decimal = decimal_to_object(decimal_num, object)
        output(decimal)
        print("继续请输入1,否则输入0:")
        flag = int(input())


运行结果

vscode下运行程序,结果如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go基础学习06-Golang标准库container/list(双向链表)深入讲解;延迟初始化技术;Element;List;Ring

基础介绍 单向链表中的每个节点包含数据和指向下一个节点的指针。其特点是每个节点只知道下一个节点的位置&#xff0c;使得数据只能单向遍历。 示意图如下&#xff1a; 双向链表中的每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中可以从前向后或从后…

Docker仓库搭建

目录 一、Docker Hub 二、私有Registry仓库搭建 1、下载并开启仓库镜像registry 2、Registry加密传输 3、建立一个registry仓库 4、为客户端建立证书 5、测试 6、为仓库建立登录认证 三、Harbor仓库搭建 Docker 仓库&#xff08;Docker Registry&#xff09; 是用于存…

8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征

特征工程是机器学习流程中的关键步骤&#xff0c;在此过程中&#xff0c;原始数据被转换为更具意义的特征&#xff0c;以增强模型对数据关系的理解能力。 特征工程通常涉及对现有数据应用转换&#xff0c;以生成或修改数据&#xff0c;这些转换后的数据在机器学习和数据科学的…

书生大模型实战营学习[9] OpenCompass 评测 InternLM-1.8B 实践

准备工作 打开开发机&#xff0c;选择cuda11.7环境&#xff0c;A100选择10%&#xff0c;点击创建&#xff0c;然后进入开发机即可&#xff0c;和之前的操作一样。接下来创建环境&#xff0c;下载必要的依赖包 conda create -n opencompass python3.10 conda install pytorch2…

什么是网络安全自动化以及优势与挑战

目录 网络安全自动化的工作原理 网络安全自动化的好处 增强的安全功能 改善表现和姿势 降低安全成本 简化的安全合规性和审计 更好的端点管理 网络安全自动化的挑战 耗时且容易出错的安全流程 可见性降低&#xff0c;风险和成本增加 合规管理 有用的网络安全自动化…

2024年合肥市职业院校技能大赛(中职组)赛 网络安全 竞赛样题

2024年合肥市职业院校技能大赛(中职组)赛 网络安全 竞赛样题 (总分100分) 培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;624032112 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&am…

基于nodejs+vue的旅游管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Docker启动失败,Failed to start docker,只需三个步骤,看我怎么搞定它!

在项目部署上线的时候 1打开hyper-v虚拟机 怎么打开呢&#xff1f; 命令提示符输入control,点击回车&#xff0c;打开控制面板&#xff0c;打开“程序和功能”&#xff0c;“启用和关闭windows功能”&#xff0c;选择Hyper-v&#xff0c;勾选下面的每一项内容。完成之后又点…

机器学习-模型集成

文章目录 模型集成为什么要集成&#xff1f;模型集成要解决的问题主要的集成思想 Committees多个模型的结果进行融合。BaggingBagging 特点 BoostingAdaBoost算法过程 GBDT负梯度拟合 XGBoostXGBoost 参数通用参数booster 参数学习目标参数 模型保存 模型集成 三个臭皮匠顶一个…

结构连接能否成为精神病早期的功能预后标志?

TLDR: 该研究发现精神病首次发作的患者&#xff08;未经药物治疗&#xff09;脑部存在广泛的结构连接减少&#xff0c;尤其是前额叶-纹状体-丘脑系统的连接异常。基线时的脑部结构连接可以有效预测患者12个月后的功能恢复情况。研究表明&#xff0c;脑部结构连接的减少可能与精…

【游戏策划 还能这么玩】

长期陷入低迷的桌游圈最近重新焕发出希望的光芒。由腾讯和网易离职的策划及美术团队开发的桌游《王冠继承者之战》在一小时内众筹金额突破20万。 对于游戏策划者来说&#xff0c;不妨拓展思路&#xff0c;将目光转向尚未充分挖掘的桌游市场&#xff0c;那里可能蕴藏着让人意想…

C++ 标准模板库(STL)之集合(set)

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#张亿&#xff0c;今天呐&#xff0c;学的是集合&#xff08;set&#xff09; C 标准模板库&#xff08;STL&#xff09;之集合&#xff08;set&#xff09; (下面代码中的std::要去掉) 在C标准模板库&#xff08;STL&am…

HCIP——HCIA回顾

第一章.HCIA复习 引入场景 其实IA我们主要学习的无非就是数据包在网络中传递的基本过程&#xff0c;我们设计一个场景&#xff0c;通过回顾web页面的请求过程&#xff0c;将IA学过的基本网络工作原理来串一遍。 (在本例中&#xff0c;ISP网络为学校提供了DNS服务&#xff0c;…

数据恢复新宠!2024年Top3宝藏工具

在这个离不开电脑和手机的时代&#xff0c;U盘是我们存储照片、文档、视频的得力助手。万一U盘格式化了&#xff0c;别担心&#xff0c;数据很可能能恢复。2024年流行的三种恢复方法&#xff0c;都能帮你找回丢失的数据。记住&#xff0c;格式化后数据并非真正消失&#xff0c;…

【SpringBoot详细教程】-05-整合Druid操作数据库【持续更新】

文末看往期系列教程&#xff1a;给个关注可好&#xff1f; &#x1f332; SpringData简介 对于数据访问层&#xff0c;无论是 SQL (关系型数据库) 还是 NoSql (非关系型数据库)&#xff0c;Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。 Spring Boot 底层都是采…

Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合

龚珀兹曲线 下表数据为某跨国公司1989-2021年的年销售量数据&#xff0c;使用适合的模型预测该公司2022年的销售额&#xff0c;并得出理由。 部分数据如下表&#xff08;具体数据从主页资源下载&#xff09;&#xff1a; 年份时序&#xff08;t&#xff09;总额&#xff08;y…

Spring JDBC及声明式事务

目录 Spring JDBC基础概念 Spring声明式事务 事务传播方式 Spring JDBC基础概念 Spring JDBC 封装了原生的JDBC API&#xff0c;使得处理关系型数据库更加简单。Spring JDBC的核心是JdbcTemplate&#xff0c;里面封装了大量数据库CRUD的操作。使用Spring JDBC…

八大核心能力铸就销售精英:解锁成功销售的密钥

成功销售&#xff0c;既是精妙绝伦的艺术展现&#xff0c;也是融汇多元技能的卓越实践。无论企业处于初创的萌芽阶段&#xff0c;还是屹立行业的巅峰之列&#xff0c;跨越销售高峰的征途上&#xff0c;销售人员所掌握的八大核心能力&#xff0c;如同星辰指引&#xff0c;不可或…

高性能、高可靠,MK SD卡让数据存储无忧!

文章目录 SD卡&#xff08;Secure Digital Memory Card&#xff09;&#xff0c;作为当代数字生活中不可或缺的存储媒介&#xff0c;凭借其卓越的数据传输效率、灵活的热插拔功能以及惊人的存储容量&#xff0c;在多个领域大放异彩。从日常使用的智能手机、平板电脑到追求极致体…

【ARM】解决ArmDS Fast Models 中部分内核无法上电的问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决ArmDS Fast Models 中部分内核无法上电的问题。 2、 问题场景 在调用ArmDS的Fast Models中的Cortex-A55的模型&#xff0c;只有Core 0是上电状态&#xff0c;而Core 1处于掉电状态&#xff0c;如图2-1所示&…