计算器的编写python代码_用50行Python代码制作一个计算器

本文介绍了一个简单的Python程序,该程序利用PLYPlus库解析并计算包含加减乘除的数学表达式,如1+2*-(-3+2)/5.6+3。程序通过定义语法和操作符处理函数,实现了一个无需使用eval的安全计算器。
摘要由CSDN通过智能技术生成

简介

在这篇文章中,我将向大家演示怎样向一个通用计算器一样解析并计算一个四则运算表达式。当我们结束的时候,我们将得到一个可以处理诸如 1+2*-(-3+2)/5.6+3样式的表达式的计算器了。当然,你也可以将它拓展的更为强大。

不废话,直接上代码:#!/usr/bin/env python

# -*- coding: utf-8 -*-

#_auth by kk

# calc.py - # A simple calculator without using eval

import operator as op

from plyplus import Grammar, STransformer

calc_grammar = Grammar("""

start: add;

?add: (add add_symbol)? mul;

?mul: (mul mul_symbol)? atom;

@atom: neg | number | '\(' add '\)';

neg: '-' atom;

number: '[\d.]+';

mul_symbol: '\*' | '/';

add_symbol: '\+' | '-';

WS: '[ \t]+' (%ignore);

""")

class Calc(STransformer):

def _bin_operator(self, exp):

arg1, operator_symbol, arg2 = exp.tail

operator_func = { '+': op.add, '-': op.sub, '*': op.mul, '/': op.div }[operator_symbol]

return operator_func(arg1, arg2)

number = lambda self, exp: float(exp.tail[0])

neg = lambda self, exp: -exp.tail[0]

__default__ = lambda self, exp: exp.tail[0]

add = _bin_operator

mul = _bin_operator

def main():

calc = Calc()

while True:

try:

s = raw_input('> ')

except EOFError:

break

if s == '':

break

tree = calc_grammar.parse(s)

print(calc.transform(tree))

main()

注意,因为一开始是木有plyplus模块,所以小伙伴们记得用pip install plyplus来进行安装,最后的效果如图

[root@django opt]# python cacl.py> 1+2*-(-3+2)/5.6+34.35714285714>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值