pyCMD;一个运行数学和Python命令的简单shell

2021-02-11 16:15

I在蟒蛇。之前我继续添加更多命令,我的程序做得好吗?我不喜欢里面有大量的if语句。但我不知道更好的方法。(稍后可能会用到JSON,这就是为什么我会包含它)代

解答动态

  • sub

    • mult

      • div

        • exp

          • tetrate

            • pythonquot;unknown input errorquot;quot;addquot;subquot;multquot;divquot;expquot;teratequot;pythonquot;helpquot;help[command]。quot;help command listquot;add:\n说明:添加2个数字\n语法:add[num1][num2]quot;sub:\n说明:减去2个数字\n语法:sub[num1][num2]quot;mult:\n说明:乘以2个数字\n语法:mult[num1][num2]quot;div:\n说明:除以2个数字\n语法:div[num1][num2]quot;exp:\n说明:通过另一个\n语法:exp[num1][num2]quot;tetrate:\n说明:Tetration\n语法:tetrate[num1][num2]quot;Python:\n说明:运行Python脚本\n语法:Python[path/to/程序.py]) 我首先注意到您的代码是一个非常长的全局脚本。为了解决这个问题,我首先将代码移到functions.
              中,实际的计算可以简单到说:
              def add(arg1,arg2):打印(float(arg1)+float(arg2)) 然后获取帮助信息,我们可以添加docstring.
              def add(arg1,arg2):quot;print(float(arg1)+float(arg2)) 我们可以用Python获得docstring和操作的输出。为了使docstring格式良好,我们可以使用文本包装.dedent.
              gt;添加(quot;,quot;)15.0gt;gt;gt;文本包装.dedent(添加文档条(quot;))Add:说明:添加2个数字语法:Add[num1][num2] 为了减少代码行数,我们可以将所有这些函数到一个字典中。只需索引字典就可以得到一个特定的函数。
              COMMANDS={addquot;subquot;addquot;10quot;5quot;helpquot;:quot;quot;arg1,arg2=参数拆分()print(float(arg1)+float(arg2))PyCMD().cmdloop() 欢迎使用PyCMD,用户开始命令行,使用quot;获取帮助:helpDocumented命令(键入helpgt;)用法::=============================================添加帮助:help add add add:说明:添加2个数字语法:add[num1][num2]:add 10 515.0 帮助显然有点支离破碎。为了解决这个问题,我们可以在function.
              class PyCMD之后更改docstring(命令):def do#u add(self,arg):#。。。添加文档=文本包装.dedent(dou add.\uu doc.\uuuu.rstrip(quot;\nquot;).strip(quot;)类PyCMD(命令):def do#u add(self,arg):#。。。clean\u doc(do\u add) 这还是有点难看,所以我们可以用@来为我们做这件事。这叫做装饰师。这是有意义的,因为我们在装饰如何看医生。请注意,我们将clean_doc更改为返回fn.
              def clean_doc(fn):fn.u doc文本包装.dedent(fn.\u doc.\u.rstrip(quot;\nquot;quot;add:Description:添加2个数字语法:add[num1][num2]quot;quot;).strip(quot;)返回fnclass PyCMD(命令):intro='欢迎使用pyCMD,用户\n启动命令行,使用quot;获取帮助'prompt=quot;@command@clean_doc def do_add(self,arg1,arg2):quot;print(float(arg1)+float(arg2))PyCMD().cmdloop() 欢迎使用PyCMD,用户启动命令行,使用quot;帮助:helpDocumented命令(键入helpgt;):===========================================add帮助:help addaddadd:说明:添加2个数字语法:add[num1][num2]:添加10 515.0 其他命令供您实现

              • 有关主要问题的回顾:减少ifs 让我先说Python不支持switch声明,在这种情况下非常有用。我建议您阅读这个StackOverflow答案,了解如何获得类似的结果(我也将在这里使用这种方法)语句:
                if命令==quot;:print(float(arg1)+float(arg2)) 正在运行以下代码图案:
                打印(arg操作数arg) 那么接下来的问题是:我们如何推广它?
                事实证明,我们可以利用这个运算符此处:
                导入运算符def操作(a,b,操作数):返回操作数(a,b) 然后您可以将命令映射到不同的操作数例如:
                def get\u操作符(x) :return{'添加':运算符.add,“乘法”:操作员.mul, ... }[x] 最后你可以用一行代码:
                操作(arg1,arg2,get\ operator(命令)) 必须注意的是编写:
                get\u运算符(命令)(arg1,arg2) 人们可以说,由于与抽象、分解,等等…
                概述argparse 与其自己对命令进行所有的标记化,不如使用argparse模块。我不打算在这里解释如何将代码转换为使用argparse,但是如果您按照文档中的教程进行操作,那么应该对如何进行这项操作有严格的说明。这也将大大减少为help menu.
                naming 编写的代码在Python中,使用snake\u case命名变量和函数是一种很好的惯例。所以SavetoDisk函数将变成save_to_disk.
                Lists和enums 您的commandList不是一个列表。它只是一个由

                • 分隔的字符串性格。相反请考虑使用真列表,并为命令使用枚举而不是字符串。
                  commands=[命令.ADD, 命令.乘法祝你好运!
                  更新Python模式匹配 i刚刚发现模式matc

                  • End

                  免责声明:

                  本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。