python简易计算器
import re
"""
过程:(最内部的括号->先乘除,替换->整理表达式->加减)->替换
""" def multiply_divide(exp):
# 计算乘除
if '/' in exp:
a, b = exp.split('/')
return str(float(a)/float(b))
if '*' in exp:
a, b = exp.split('*')
return str(float(a)*float(b)) def deal_with(expr):
# 整理表达式
expr = expr.replace('++', '+')
expr = expr.replace('+-', '-')
expr = expr.replace('--', '+')
expr = expr.replace('-+', '-')
return expr def add(expr):
# 计算加减,减法的实质式加法
ret = re.findall('-?\d+\.?\d?', expr)
sum = 0
for i in ret:
sum += float(i)
return str(sum) def expr_no_bracket(expr):
# 计算括号内的值
expr = expr.strip('()')
# print(expr)
# 计算
while 1:
ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', expr)
if ret:
expr_son = ret.group()
# print(expr_son)
new_expr = multiply_divide(expr_son)
expr = expr.replace(expr_son, new_expr) # 替换
expr = deal_with(expr) # 整理
else: # 没有括号
expr = add(expr)
return expr def calculate_main(expr):
# 取空格
expression = expr.replace(' ', '')
# print(expression)
while 1:
ret = re.search('\([^()]+\)', expression)
if ret:
expr_brackets = ret.group()
# print(expr_brackets)
new_exp = expr_no_bracket(expr_brackets)
expression = expression.replace(expr_brackets, new_exp) # 求王括号内部,替换
# print(new_exp)
# print(expression)
else: # 没有括号
ret = expr_no_bracket(expression)
return ret while 1:
print('请输入表达式,按q退出!>')
expression = input('>>')
if expression == 'q':
break
ret = calculate_main(expression)
print(ret)
python简易计算器的更多相关文章
- python 简易计算器
import tkinter import tkinter.messagebox import math ''' 波波版计算器可实现的功能 1.能进行简单的加减惩处 2.能进行开根号操作 3.能进行后 ...
- python 简易计算器(只能计算加减乘除和括号)
import re # 格式化字符串函数(消除一些错误的格式) def format_string(string): # 一系列的替换语句 string = string.replace(" ...
- Python之实现一个简易计算器
自己动手写计算器 一.功能分析 用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里 ...
- python + PyQt5 实现 简易计算器
忽然想起之前一直想写个简单的计算器,今天就写了一下,界面有些简陋,但是基本功能实现没有问题 以下是源码: # --*-- coding:utf-8 --*-- import sys from PyQt ...
- 自制c#简易计算器
这是一个课堂作业,我觉得作为一个简易的计算器不需要态度复杂的东西,可能还有一些bug,有空再慢慢加强. using System;using System.Collections.Generic;us ...
- 剖析简易计算器带你入门微信小程序开发
写在前面,但是重点在后面 这是教程,也不是教程. 可以先看Demo的操作动图,看看是个什么玩意儿,GitHub地址(https://github.com/dunizb/wxapp-sCalc) 自从微 ...
- PHP学习笔记02——简易计算器
<!DOCTYPE html> <html> <head> <title>PHP简易计算器</title> </head> &l ...
- JavaScript之简易计算器
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- 菜鸟学习Struts——简易计算器
这是学习Struts的一个简单的例子文件结构如下: 1.配置Struts环境 2.新建input.jsp,success.jsp,error.jsp input.jsp代码如下: <%@ pag ...
随机推荐
- vue-上传文件
<label for="exampleInputFile">头像</label> <img :src=" imgsrc != '' ? im ...
- linux 使用 ioctl 参数
在看 scull 驱动的 ioctl 代码之前, 我们需要涉及的另一点是如何使用这个额外的参数. 如果它是一个整数, 就容易: 它可以直接使用. 如果它是一个指针, 但是, 必须小心些. 当用一个指针 ...
- linux 后备缓存
一个设备驱动常常以反复分配许多相同大小的对象而结束. 如果内核已经维护了一套相同 大小对象的内存池, 为什么不增加一些特殊的内存池给这些高容量的对象? 实际上, 内核 确实实现了一个设施来创建这类内存 ...
- Linux 内核PCI 中断
对于中断, PCI 是容易处理的. 在 Linux 启动时, 计算机的固件已经分配一个唯一的中 断号给设备, 并且驱动只需要使用它. 中断号被存储于配置寄存器 60 (PCI_INTERRUPT_LI ...
- 一个APP从启动到主页面显示经历了哪些过程?
①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求: ②system_server进程接收到请求后,向zygote进程 ...
- Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?
本篇为转载,原文链接:https://blog.csdn.net/lijingshan34/article/details/88350456 翻译一下:chrome 监听touch类事件报错:无法被动 ...
- javascript 闭包的理解(二)
// 定义一个User构造函数 function User(properties){ //遍历对象属性,确保它作用域正确 for(var i in properties){ (function(whi ...
- Win7安装和配置Apache
一.版本介绍 首先,我们需要下载Apache2.4服务器:http://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC14 关于现在那个版 ...
- mysql中information_schema.columns字段说明
1. 获取所有列信息(COLUMNS) SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='数据库名'; COLUMNS表 ...
- vmware安装ubuntu的简单配置
介绍:ubuntu是一个桌面体验比较好的linux操作系统,尝试使用vmware安装一个虚拟机试用一下,做个简单记录,安装操作系统步骤省略 一.配置root用户,并使用root登录图像界面 Ubunt ...