2025-11-1 20:02:58 [显示全部楼层]
12浏览
查看: 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个字符至第(输出的长度)个字符
                    输出结果

测试

测试

进制转换器.py.txt

2.81 KB, 下载次数: 0

进制转换器.py.txt

2.81 KB, 下载次数: 0

材1  学徒
 楼主|

发表于 昨天 20:04

文本文档下载后一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail