进制转换器(对两大运算问题及一处变量易误解的纠正)
上次的进制转换器python版有缺陷,主要是因为 第34行的条件错误,本该用“inputbaseMin<inputbase and inputbase<63”(正确条件),
却错写成“1<inputbase and inputbase>inputbaseMin”(错误条件)
34行的错误可能会使inputbase大于访问上限,进而引发错误
第73行没使用字符访问添加,
本该用“output+=num”(数值访问添加)例:输入10进制271,输出16进制10F,正确,
却误用为“output+=str(a)”(数值直接添加)例:输入10进制271,输出16进制1015,错误。
73行的误用会导致11进制及以上的进制转换输出错误
我还把
上一版的变量“num”改成了“NUM”,
主要是因为这段时间了解到
按照惯例,python“常量(本质还是变量)”的名称一般用大写字母定义。
已全部改正。
这次来详细讲解作品(改1)的各个部分:
第1~6行:打印参数
1:打印支持字符集
2:打印支持输入进制的基础范围
3:是对第2行的补充,打印支持输入进制的上限判断条件
4:打印支持输出进制的范围
5~6:分别打印了支持输入数的条件:整数,正数
(第1~6行的字符串末尾都有“\n”,这是换行符,有了它就不用多个“print”逐一打印参数)
第7行:定义变量“NUM”(字符集),用于后面的字符访问合并
第8~79行:循环:输入/出流程
8:用while(1)包裹后面的代码,使程序不至于在执行一次流程后就直接退出
第9~27行:循环:确保“输入数”合法
10:定义变量“inputnum”,用于存储输入数,并询问以赋值
11:定义变量“inputbaseMax”,用于存储输入进制最大值
12~17行:
for循环(inputnum的长度)次确定输入数是否合法,并在此过程中用访问比较数值大小确定inputbaseMax
18~27行:
如果输入数合法则
退出一层循环
否则
输出错误信息(不崩溃)
(第28行空格)
第29~39行:循环:确保”输入进制“合法
30:定义变量“strinputbase”,用于存储输入进制的字符串形式(如果直接以整数形式存储,当输入非数字时会出现非正常行为),并询问以赋值
第31~39行:用“尝试...如果报错...” 确定输入数是否合法:
尝试:
如果输入数合法则
定义变量“inputbase”,并将其赋值为int(strinputbase)
退出一层循环
否则
输出错误信息
如果报错:
输出错误信息
(第40行空格)
第41~51行:循环:确保”输出进制“合法,大体思路与第29~39行一致
(第52行空格)
第53~79行:核心算法
如果(输入进制==输出进制)则直接输出“输入数”
否则
定义变量“inputten”,并将其赋值为0
如果(输入进制==10)则将其赋值为int(inputnum)
否则for循环(inputnum的长度)次 将inputten按(输入进制^位数*位值)的形式逐位增加(结果得到的就是输入的十进制式)
如果(输入进制==10)则直接输出“输入数的十进制式”
否则
定义变量“output”,并将其赋值为空字符串
将inputten增加1(因为日常计数是从1开始,而python是从0开始,两者相差1,还因为后面涉及到复杂的变换)
定义变量“OPbaseMax”(输入进制最高位),并将其赋值为0
重复将OPbaseMax增加1直到(outputbase^OPbaseMax大于等于inputten)
重复直到OPbaseMax==0:(从左到右进行计算)
OPbaseMax增加-1
用a循环outputbase次(第一次a为0,第二次a为1,第三次……)
如果(outputbase^OPbaseMax*a小于等于inputten 与 outputbase^OPbaseMax*(a+1)大于等于inputten):
output+=NUM(访问并添加,相当于output+=NUM的第a+1个字符)
inputten-=outputbase**OPbaseMax*(a)(输入的十进制式减少outputbase^OPbaseMax*a,已转换好的部分要减去)
退出循环
如果output的第1个字符==‘0’:(有时计算会保留前导0,这一部分用于将其去除)
输出=输出的第2个字符至第(输出的长度)个字符
输出结果
文本文档下载后一个
页:
[1]