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 ...
随机推荐
- H3C设置时间--用户视图下
<H3C>clock datetime ? TIME Specify the time (HH:MM:SS) <H3C>clock datetime 19:29:00 ? ...
- linux下mysql5.7忘记root密码修改
朋友最近开始学服务器,mysql密码忘了又不会弄,让我帮忙解决一下.重置或修改mysql的root密码这种事平时很少做,还是得google辅助一下,于是弄完了写篇博客记录一下,方便若干月后又有人遇到这 ...
- 如何抢占云栖大会C位?史上最强强强攻略来了
本文作者:阿里云头条 原文链接 本文为云栖社区原创内容,未经允许不得转载.
- 【Git】git-filter-branch - Rewrite branches
1.命令使用场景 ①Removing sensitive data from a repository(https://help.github.com/en/github/authenticating ...
- Servlet学习笔记(一)
使用Servlet所需要导入的包: java.io.*; javax.servlet.*; ...
- looping through multiple lists
map: 最大长度输出: zip: 最短输出: third: 有序排列: a = ['a1', 'a2', 'a3'] b = ['b1', 'b2'] print "Map:" ...
- 聊聊多线程哪一些事儿(task)之 一
多线程,一个多么熟悉的词汇,作为一名程序员,我相信无论是从事什么开发语言,都能够轻轻松松说出几种实现多线程的方式,并且在实际工作种也一定用到过多线程,比如:定时器.异步作业等等,如果你说你没有用过多线 ...
- .bash_profile 文件
1,当 .bash_profile 文件输入有误的时候,所有命令行都会不好使 输入 export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin ...
- C# event 事件-2
本次是对第一篇事件随笔的补充笔记,涉及题目依然使用上一篇的习题.上一篇地址:https://www.cnblogs.com/FavoriteMango/p/11685702.html 1.事件的定义 ...
- 1.1 Lack of free swap space on zabbix_server (zabbix监控报错)
1.首先看一下内存 free -m 2.然后创建一个分区添加交换文件 mkdir /home/temp dd if=/dev/zero of=/home/temp/swap bs=1024 count ...