材1 发表于 昨天 20:02

进制转换器(对两大运算问题及一处变量易误解的纠正)

上次的进制转换器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 发表于 昨天 20:04

文本文档下载后一个
页: [1]
查看完整版本: 进制转换器(对两大运算问题及一处变量易误解的纠正)