【Python训练营】Python每日一练----第36天:进制转换(十六进制转八进制、十六进制转十进制、十进制转十六进制)

举报
是Dream呀 发表于 2022/04/11 18:02:27 2022/04/11
【摘要】 【Python训练营】Python每日一练----第36天:进制转换(十六进制转八进制、十六进制转十进制、十进制转十六进制)

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

前言:【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡

@TOC

1.题目描述:十六进制转八进制

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0-9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 
输出格式
  输出n行,每行为输入对应的八进制正整数。
  
【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

解题思路

  • 题目中提到不可以有前导0,也就是说二进制前面不需要加0o,八进制前面不需要加0x,而且16进制不需要加ox;
  • 那么就16进制转化为8进制的话,可以先转十进制再转八进制,因为如果16直接转8进制,前面需要+0x,这样会比比较复杂,不如先转10进制。
  • 转十六进制:a=hex(2)0x2
  • 转十进制:a = int(s,16) 这里的int(s,16)代表把16进制的s转化成10进制 这里特别要注意其中的 s必须为字符串,如果你在其中不加任何设定的输入数字的话,他会自动认定为整数,这样肯定会报错的,所以说你可以使用引号或者将前面加上str()去进行一个字符串的转化:a = int(str(3),16) print(a)
  • 转八进制:a=oct(2)0o2
  • 转二进制:a=bin(2)0b10
  • 回到原题,再进行十六进制转化十进制后,我们需要利用oct()将十进制转化为八进制,这里的八进制转化后,是带有前缀0o的,所以说我们需要取其从第三位开始的数据,即字符串切分处理:list1.append(b[2:])

源码分享

# @Time : 2022/3/28 9:34
# @Author : 是Dream呀
# @File : 进制问题:16转8.py
n = int(input())
list1 = []
for i in range(n):
    if n <= 10:
        s = input()
        if len(s) <= 100000:
            a = int(s,16)  # 先转十进制再转八进制,因为如果16直接转8进制,前面需要+0x,这样会比比较复杂,不如先转10进制。
            b = oct(a)  # 转八进制
            list1.append(b[2:])  # 转完之后的8进制前面是还有0o,需要从第三位开始取值
for i in list1:
    print(i)

2.题目描述:十进制转十六进制

问题描述
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。 输入格式   输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式   
输出这个整数的16进制表示 样例输入 30 样例输出 1E

源码分享

在这里,我们需要用到.upper()和.lower()方法,去将转化后的字母进行大写处理,因为默认转置之后的字母都是小写的,需要我们用 upper() 函数进行大写处理,然后再进行切分处理。

# @Time : 2022/3/28 9:51
# @Author : 是Dream呀
# @File : 进制问题:10转16.py
n = int(input())
a = hex(n).upper()  # .upper()将字符串中的小写字符自动转化为大写,lower()方法可将字符串中的所有大写字母变为小写
# 如果不进行小写转大写转换的话,10进制转16进制,默认转化为小写字母形式。
print(a[2:])

3.题目描述:十六进制转十进制

源码分享

int(str1,16)表示把一个16进制的数转化为10进制,其中的16可以为8或者2表示在不同的进制中进行转换。

# @Time : 2022/3/28 9:49
# @Author : 是Dream呀
# @File : 进制问题:16转10.py
str = input()
print(int(str,16))  # int(str1,16)表示把一个16进制的数转化为10进制,其中的16可以为8或者2表示在不同的进制中进行转换。

学习总结

🏅今天是我在Python训练营的第 36 天,希望每天都能见到最棒的你🏅

🌟 The best time to plant a tree is ten years ago, followed by now! 🌟

🌲🌲🌲 最后,作者很感谢能够阅读到这里的读者。如果看完觉得好的话,还请轻轻点一下赞或者分享给更多的人,你们的鼓励就是作者继续行文的动力。
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了,我们下期再见~
在这里插入图片描述
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。