用python实现简单的计算器功能,有很多思路,这里介绍三种方法,并分析各自的优缺点。下图是一个真是的计算器,由StellrWeb摄于Unsplash:

众所周知,根据Tao of Python的规定,对于任何给定任务:

应该有一种明显的方法,最好只有一种

但是,在编写简单的计算器程序的情况下,有许多不同的方法可以执行此操作。哪一个是“最佳”,很大程度上取决于上下文。

在本文中,我将讨论三种常见的方法,包括每种方法的优点和缺点。

方案1:条件分支法

如果只有一种“明显”的方式在Python中构建计算器,那就是使用条件分支。

基本步骤是:

要求用户输入

根据选择的操作员有条件地选择一项操作

使用选定的运算符执行计算

打印结果

实现代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20num1 = input("First Number:\n")

operator = input("Operator (+, -, *, /):\n")

num2 = input("Second Number:\n")

num1 = float(num1)

num2 = float(num2)

out = None

if operator == "+":

out = num1 + num2

elif operator == "-":

out = num1 - num2

elif operator == "*":

out = num1 * num2

elif operator == "/":

out = num1 / num2

print("Answer: " + str(out))

执行该程序,控制台输出:

1

2

3

4

5

6

7

8First Number:

1

Operator (+, -, *, /):

+

Second Number:

2

Answer: 3.0

这种方法缺点是:

一个简单的任务有很多代码

方案2:eval()

另一种方法是使用Python的内置eval()函数。 eval允许将任何字符串评估为Python表达式。这是个非常强大的功能,因为它允许在运行时动态生成和执行代码。

使用此代码,可以将以上代码简化为:

1

2

3calc = input("Type calculation:n")

print("Answer: " + str(eval(calc)))

与解决方案1相比,eval()有一些优点:

它可以接受任意表达式(例如1 + 2-3 * 4`),而不仅限于二元操作

代码少

如果仅在自己的计算机上本地使用”eval”,它可能是“一种明显的方式”,因为它非常方便且功能强大。但是,在生产环境中应格外小心。原因是eval可以执行任意python表达式,因此可以用于恶意目的。

可以在此处上找到有关”eval”的安全风险的好文章。

方案3:字典查找和递归

在此版本的Python计算器中,与解决方案1相比,我们将进行以下增强:

字典查找用于排除条件分支。这使代码更清洁,更具可读性和可扩展性

使用Python的operator模块来代替定义我们自己的数学函数

递归用于支持复杂的数学表达式(不仅仅是二进制运算)

结果代码如下:

这种方法比解决方案1更强大,并且比解决方案2更安全。

它的工作方式是,当用户传入一个字符串(例如1 + 2*3)时,我们的calculate()函数遍历我们在operators词典中定义的每个运算符,并调用字符串partition方法首次出现在该运算符上。对于”1 + 2 * 3”,这将给我们:

1

2

3left = '1'

operator = '+'

right = '2*3'

calculate()是然后在子表达式上递归调用,直到它s.isdigit()返回true为止。因此,在上面的示例中,我们的递归调用将如下所示:

1return operators['+'](calculate('1'), calculate('2*3'))

解析为:

1return add(1, 6)

完整代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19from operator import pow, truediv, mul, add, sub

operators = {

'+': add,

'-': sub,

'*': mul,

'/': truediv

}

def calculate(s):

if s.isdigit():

return float(s)

for c in operators.keys():

left, operator, right = s.partition(c)

if operator in operators:

return operators[operator](calculate(left), calculate(right))

calc = input("Type calculation:\n")

print("Answer: " + str(calculate(calc)))

运行该程序,控制台输出 :

1

2

3Type calculation:

1+2*3-5

Answer: 2.0

终极方案方案:使用e模块!

终极方法是使用e模块。这样,我们可以从命令行打开Python解释器“直接”计算Python表达式。

安装:

1pip install e

然后使用一行命令即可计算任意表达式:

1

2

3

4$ python -me 1 + 1

2

$ python -me "10 * 5 - (6**2) + 6 / 3"

16

十分简单易用!

python编程计算器_Python3-用Python编写计算器的3种方法相关推荐

  1. python抓资源_python3 抓取网页资源的 N 种方法

    转自:https://www.cnblogs.com/goldd/p/5457229.html 1.最简单 import urllib.request response = urllib.reques ...

  2. python编程在哪里写-python入门该从哪里开始?

    相信对于每个人而言,知道编程和学习编程这件事,出发点是不同的.汤哥在北京接触编程的时间是2013年,那个时候还在一个二线城市上大学,还没有这么多各种融资,各种互联网创业的氛围,大家想的更多的是一些线下 ...

  3. python编程300集免费-python 300本电子书合集

    链接: https://pan.baidu.com/s/1CNlB35ASnDNlUGNCZJbiAA 提取码: fxig Q群:592857363 更多所在 数据科学速查表 零起点Python机器学 ...

  4. python编程入门-Python编程入门经典pdf(Python编程入门教程) 高清中文版

    Python编程入门经典pdf(Python编程入门教程)下载.Python编程入门经典pdf高清版帮助各位更好的进行Python编程的学习以及理解,最经典的课题,最深入的概念,让你在Python编程 ...

  5. 手机版python编程软件下载,手机python编程软件

    1.求 python 64位安装包下载 软件介绍: python是一款面向对象.解释型.动态数据类型的高级编程设计语言.它拥有语言上的简洁性.可读性和易维护性,在图形处理.数学处理.文本处理.系统编程 ...

  6. python编程输入标准-揭秘python编程技巧

    揭秘python编程技巧 一.python的标准输入和输出[root@133 wc]# vim stdin.py #!/usr/bin/python #encoding:utf-8 import sy ...

  7. python开发cs程序_CSE209代做、代写Computer Graphics、代做CS/python编程设计代写Python程序|代做Processing...

    CSE209代做.代写Computer Graphics.代做CS/python编程设计代写Python程序|代做ProcessingCSE209 Computer Graphics~1~CSE209 ...

  8. Python编程好学吗 为什么Python如此受欢迎

    Python编程好学吗?为什么Python如此受欢迎?Python的包装能力.可组合性.可嵌入性都很好,可以把各种复杂性包装在Python模块里,暴露出漂亮的接口.因此,Python自然是大受欢迎. ...

  9. python编程方式_自学python编程的方法路线

    怎么自学python编程 如何自学Python编程?一堆的Python教程却感觉无从下手呢?我想这应该是很多Python初学者正在纠结的问题. 今天想要分享给大家的是如何自学Python编程,学习这件 ...

  10. 树莓派python编程优点_树莓派为什么会使用python编程?为什么有时python运行效率不高?...

    在许多编程语言中,Python的语法也有很大不同.Python使用空格或缩进来分隔不同的代码块.C语言和其他语言使用花括号来区分不同的代码块,例如if语句,Python使用冒号和缩进来定义代码块.这也 ...

最新文章

  1. django1.4日志模块配置及使用
  2. mvd没什么每次参数双都多一个逗号_学服装设计后,家里多了哪些奇怪又可爱的宝藏物品?...
  3. 玩转springboot:默认静态资源和自定义静态资源实战
  4. YBTOJ洛谷P2839:最大中位数(主席树、二分答案)
  5. 苹果手机输入屏保后锁屏_修一块手机屏幕要7080元?
  6. 宏锦软件 Android 的 ListView 使用详解
  7. 电脑软件怎么卸载干净_软件分享(一)【电脑】软件卸载工具
  8. Spring Boot 整合定时任务,可以动态编辑的定时任务2022-03-09 11:27·java互联网架构
  9. otool介绍(转http://www.mc2lab.com/?p=68)
  10. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.23
  11. 【026】国务院督查组莅临翼辉信息参观调研
  12. 更改计算机图标大小得方法,更改桌面图标大小方法
  13. win10系统通过关键字快速搜索文件内容的软件
  14. 语义相似度(实践篇)
  15. iPhone越狱后恢复
  16. 博主眼中的SEM竞价推广
  17. 数据库连接超时的处理
  18. python下载bt文件_给定一个.torrent文件,如何在python中生成一个磁力链接?
  19. bandit game
  20. JavaWeb期末考试复习资料

热门文章

  1. ​在职场,我们如果高效地沟通
  2. C语言统计文章单词出现的次数,统计英文文章中单词出现频率
  3. exception java .text_java.text.ParseException
  4. 这个设计思想能启蒙你很多年,嵌入式裸机按键扫描
  5. Linux内核入门: UL(x)、ULL(x)
  6. python 图像批量png转jpg格式
  7. thinkphp5 注入 反序列化写文件 phar反序列化
  8. ISE Module Browser –直观高效的PowerShell模块管家!
  9. orb-slam2 从单目开始的简单学习(7):Optimizer
  10. 【报错】“OSError: [Errno 22] Invalid argument: ‘cache\\resume_lattice_only_tra”