更强更方便的进制转换工具
最近,我仿照https://blog.csdn.net/Eyizoha/article/details/94897931?locationNum=9&fps=1上的2-36进制转换的代码做出了一个更强的2-62进制转换工具,不仅可以进行普通的进制转换,还可以直接进行不同进制计算,代码如下(Python3):
from decimal import *
getcontext().prec = 1000
def trans(num): # 输入数字换为字母或输入字母转换为数字if type(num) == int:if num < 10:return str(num)elif num < 36:return chr(ord('a') + num - 10)else:return chr(ord('A') + num - 36)else:if num.isdigit():return int(num)elif num.islower():return ord(num) - ord('a') + 10elif num.isupper():return ord(num) - ord('A') + 36def check(num, base, target): # 待转换数字,当前进制,目标进制if type(base) is not int or base < 2 or base > 62 or type(target) is not int or target < 2 or target > 62:print('非法进制数!')return Falseif type(num) is int or type(num) is Decimal:num = str(num)elif type(num) is str and len(num) != 0:num = numelse:print('非数字输入!')return Falseif num.count('.') > 1:print('多个小数点!')return Falseif not num.replace('.', '').isalnum():print('含有其他字符!')return Falsefor c in num.replace('.', ''):if trans(c) >= base:print('字符超过进制允许!')return Falsewhile len(num) > 1:if num[0] == '0' and num[1] != '.':num = num[1:]else:breakreturn numdef basechange(num, base, target, precision=8): # 待转换数字,当前进制,目标进制,精度num = check(num, base, target)if num is False:return Nonepoint = num.find('.')if point == -1:point = len(num)radix = num.replace('.', '')if target == 10:int_part = radix[:point][::-1]frac_part = radix[point:]s = 0ss = 0for i in range(len(int_part)):s += trans(int_part[i]) * base ** ifor i in range(len(frac_part)):ss += trans(frac_part[i]) / base ** (i+1)return str(s) + str(ss)[1:]elif base == 10:int_part = int(radix[:point])frac_part = Decimal('0.'+radix[point:])s = ''while True:s += trans(int_part % target)int_part //= targetif int_part == 0:breaks = s[::-1]if frac_part != 0:s += '.'ct = 0while frac_part != 0 and ct < precision:frac_part *= targets += trans(int(frac_part))frac_part -= int(frac_part)ct += 1return selse:return basechange(basechange(num, base, 10, precision=precision), 10, target, precision=precision)def abpl(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)+Decimal(b),10,target,1000) #加法def absu(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)-Decimal(b),10,target,100) #减法def abmu(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)*Decimal(b),10,target,100) #乘法def abdi(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)/Decimal(b),10,target,100) #除法def abpo(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)**Decimal(b),10,target,100) #乘方def abrt(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)**Decimal(1/Decimal(b)),10,target,100) #开方def abfl(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)//Decimal(b),10,target,100) #除法
以下是演示:
abpo(2,10,100,10,62)
'qADiGrP0AKRA2S8Uw'
abmu('acc',62,'python',62,10)
'917683977345620'
abrt(2,10,100,10,62)
'1.0qJHxLPX0S8850kC42G0iHHAWSopXPjVS0okYnGj5tINlPl6xyZ7j4nBqCcrjw7q5Stze0ppJMJ5rGcETWKEqsZMjj80gBUIqTke'
但存在一些缺陷,例如:
abpo('gig',62,100,62,62)
含有其他字符!
abpo(31,10,800,10,62)
含有其他字符!
这是因为当数字较大的时候,可能会使用科学计数法(有一个+号)。
希望日后可以改进。
更强更方便的进制转换工具相关推荐
- ASCII HEX BIN DIG进制转换工具页
ASCII HEX BIN DIG进制转换工具页 http://www.ab126.com/goju/1711.html
- JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- 在线2-36任意进制转换工具
在线2-36任意进制转换工具 在线2-36任意进制转换工具 本工具支持将数字从在2-36进制中任意进制间相互转换,只支持整数,纯客户端实时计算. https://tooltt.com/hex/
- JavaScript实现在线进制转换工具网站 -toolfk程序员工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- Java 进制转换工具类
/*** 进制转换工具类* @author dell**/ public class HexadecimalUtil {/*** 获得倒序二进制数据* @param hexString* @retur ...
- java 进制转换工具_进制转换工具(JAVA)
/**进制转换工具,支持2-36任意进制间相互转换 */ public class HexConverter { public static String Quotient = null; publi ...
- 通用进制转换工具,可实现进制之间的任意转换
通用进制转换工具,可实现2进制,8进制,10进制,16进制之间的任意转换 以下是软件截图: 以下是软件下载地址: http://download.csdn.net/source/3371415 转载于 ...
- Android开发实用小工具十——进制转换工具
文章目录 前言 一.效果展示 二.代码 1.样式布局 2.主代码 总结 前言 进制转换工具的开发与实现. 一.效果展示 二.代码 准备工作与我开发的另一个小工具(长度转换工具)所用一致,详情请看我上一 ...
- java:实现进制转换工具(附完整源码)
java:实现进制转换工具 package com.xxq;import java.awt.BorderLayout; import java.awt.EventQueue;import javax. ...
最新文章
- 【其他】将幕布文章OPML转换为Markdown的方法
- Java项目:学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
- Asterisk安装
- 关于学习Python的一点学习总结(42->继承list)
- 如何用sqlyog实现远程连接mysql
- python游戏服务器引擎_KBEngine游戏服务器引擎环境配置
- hive hql文档_30分钟入门 Hive SQL(HQL 入门篇)
- Java实例_综合实践3.K-Means聚类算法
- python3super用法_Python3中的super()函数详解
- 【编程语言】Kotlin之object关键字
- HBase Filter及对应Shell
- iphone 添加网易邮箱(126/163)踩坑(ios16)
- 国外漂亮html5网页设,高端大气上档次!10个精美的国外HTML5网站欣赏_html/css_WEB-ITnose...
- XSS网站漏洞如何修复 大牛支招让您网站更安全
- python_while 循环_珠穆朗玛峰
- vscode 实时运行代码插件 Quokka
- 怎么画一点透视,两点透视,三点透视
- skip-gram 学习笔记
- 预付费售电管理系统的构建及应用
- python求excel平均数_#python抓取excel表格数据#使用python3读取处理excel表的数据内容如何对内容求平均值...
热门文章
- scp复制多个文件及通配符问题
- WPS Word中怎么打出拼音和声调让别人懂的这个字怎么读
- iTunes备份目录转移
- java 文件遍历排序_Java的二叉树排序以及遍历文件展示文本格式的文件树
- 华为手机怎样恢复Android,华为手机怎么恢复出厂设置 华为恢复出厂设置的两种方法...
- Nginx Rewrite 正则表达式
- 终极议程!火星财经开启12小时不间断视频直播直击Filecoin主网上线
- vscode html注释快捷键_宇宙最强vscode教程(基础篇)
- illustrator插件-将位图矢量化-转为SVG-AI插件-临摹-范例
- ida 调试android之路