|
12| 1
|
[项目分享] 进制转换器(对两大运算问题及一处变量易误解的纠正) |
|
上次的进制转换器python版有缺陷,主要是因为 第34行的条件错误, 本该用“inputbaseMin<inputbase and inputbase<63”(正确条件), 却错写成“1<inputbase and inputbase>inputbaseMin”(错误条件) 34行的错误可能会使inputbase大于[color=rgba(0, 0, 0, 0.85)]访问上限,进而引发错误 第73行没使用字符[color=rgba(0, 0, 0, 0.85)]访问添加, 本该用“output+=num[a]”(数值[color=rgba(0, 0, 0, 0.85)]访问添加)例:输入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[a](访问并添加,相当于output+=NUM的第a+1个字符) inputten-=outputbase**OPbaseMax*(a)(输入的十进制式减少outputbase^OPbaseMax*a,已转换好的部分要减去) 退出循环 如果output的第1个字符==‘0’:(有时计算会保留前导0,这一部分用于将其去除) 输出=输出的第2个字符至第(输出的长度)个字符 输出结果 |
沪公网安备31011502402448© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed