【小程序】计算器(使用正则表达式实现)

功能:

  1. 实现加减乘除及拓号优先级解析
  2. 用户输入

    1-2*((60-30+(-40/5)*(9-2*5/3-2*(-18.3/3-(5*2+3+(-2*3)*(-7-1)/(5*7)*2)+2/6*7)+(-6+5+1)-7/3*99/4*(-2998)/3+10*568/14))-(-4*3)/(16-3*2))+(2+3*2)+(2-3)

    类似公式后,通过正则表达式解析里面的(),+,-,*,/符号和公式,运算后得出结果

# Author:q1.ang
import re
content=input(‘‘‘
- - - 计算器 - - -
输入:
‘‘‘).strip()
# content=‘1-2*((60-30+(-40/5)*(9-2*5/3-2*(-18.3/3-(5*2+3+(-2*3)*(-7-1)/(5*7)*2)+2/6*7)+(-6+5+1)-7/3*99/4*(-2998)/3+10*568/14))-(-4*3)/(16-3*2))+(2+3*2)+(2-3)‘

def calculation(find_list,content):
    ‘‘‘
    计算find_list中的式子
    :param find_list: 正则表达式索引到的列表
    :param content: 原计算式
    :return: 计算后的计算式
    ‘‘‘
    for i in find_list:
        print(‘计算式:‘,i)
        result=0
        if ‘*‘ in i or ‘/‘ in i:#判断是否含有乘除号
            num = re.findall(‘[\-\d\.]+‘,i) #提取数字
            symbol=re.findall(‘[*/]‘,i)     #提取运算符,*/
            print(‘num:‘, num)
            print(‘symbol:‘, symbol)
            for i2 in range(len(symbol)):   #循环计算,num1为数字1,num2为数字2,sym为运算符
                print(‘计算次数:‘, i2 + 1)
                num1=num[i2]
                num2=num[i2 + 1]
                sym=symbol[i2]
                if sym == ‘*‘:
                    num[i2 + 1] = float(num1) * float(num2)
                elif sym == ‘/‘:
                    num[i2 + 1] = float(num1) / float(num2)
                if i2 == (len(symbol) - 1):
                    result = num[i2 + 1]
                    print(‘结果:‘, result)
        else:#加减运算
            num=re.findall(‘\-{0,1}[\d\.]+‘,i)      #提取数字
            for i3 in num:
                result+=float(i3)
            print(‘结果:‘, result)
        content=content.replace(i,str(result),1)    #替换
    return content

def replace_symbol(content):
    ‘‘‘
    替换重复相连的运算符
    :param content: 原计算式
    :return: 替换后的计算式
    ‘‘‘
    content = content.replace(‘++‘, ‘+‘)
    content = content.replace(‘--‘, ‘+‘)
    content = content.replace(‘-+‘, ‘-‘)
    content = content.replace(‘+-‘, ‘-‘)
    content = content.replace(‘*+‘, ‘*‘)
    content = content.replace(‘+*‘, ‘*‘)
    content = content.replace(‘/+‘, ‘*‘)
    content = content.replace(‘+/‘, ‘*‘)

    return content
stop_flag=True
content1=‘‘
while stop_flag:
    find_mul_div = re.findall(‘(?:[\d\.]+(?:[*/]\-|[*/]))+[\d\.]+‘,content) #匹配所有乘除法,2*3/4
    content=calculation(find_mul_div,content)
    content=replace_symbol(content)
    print(content)

    find_bracket = re.findall(‘\([+\-*/\d\.]+\)‘,content)                   #匹配最内括号里的内容,2*3/4
    content=calculation(find_bracket,content)
    content=replace_symbol(content)
    print(content)

    if content1==content:   #运算至只有加减法
        last=[content]
        content = calculation(last,content)
        stop_flag=False

    content1 = content

    print(‘=‘,content)

原文地址:https://www.cnblogs.com/q1ang/p/9063727.html

时间: 2024-11-10 01:00:38

【小程序】计算器(使用正则表达式实现)的相关文章

js 小程序 计算器

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

微信小程序开发—项目实战之计算器开发

我参加CSDN博客之星评选啦,感谢大家前往投票支持! 投票地址:http://blog.csdn.net/vote/list.html?keyword=anda0109#search 就像学习一门开发语言首先会写出"Hello World"一样,学习开发一个应用首先得写出一个"计算器",这也是开发者的入门必经之路.想当年我学习C/C++也是从一个计算器入门而后一往无前的. 小程序的第一个应用,我也选择了开发计算器,入门神器嘛.首先,它的界面相对简单,适合入门:其次,

初遇C#:一个简单的小程序(圆形周长,面积计算器)

作为一个面向对象的语言,与用户的交互很关键! 在此,我们可以先分析一下我们这个小程序要与用户交互的内容:1.命名很重要,让用户看见这个程序就知道这个程序的作用. 2.当用户打开这个程序时,提示用户输入的内容. 下面开始编码: Console.Write("请输入圆形的半径:"); double r=double.Parse(Console.ReadLine());//接收用户的输入并将用户的输入转换成双精度型并赋值给r double area,circle;//定义两个变量area和c

java 学习 ——计算器小程序

简易计算器小程序代码: package jisuanqi; //声明需要插入的包 import java.awt.*; import java.lang.Object; import java.lang.String; import javax.swing.*; import java.awt.event.*; import java.awt.TextComponent; //声明一个主类jisuanqi,继续窗口类Frame public class jisuanqi extends Fram

第一个小程序-简单计算器

虽然这是一个比较简单的小程序,但是在看过一遍视频之后还是感觉无从下手.只要原因是没有思路,准确说是缺乏对程序的一个整体的构思. 先来说一下编写简单计算器代码的构思: 建立index.php文件-> 编写html基本结构:head.title.body-> 使用表单table结构提交数据给php进行运算-> 定义form,声明提交方式:<form action="index.php" method="post">-> php通过$_

微信小程序开发(2) 计算器

在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发计算器功能. 本文主要分为两个部分,小程序主体部分及计算器业务页面部分 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. 小程序逻辑 App({ onLaunch: function() { // Do something initial when launch. }, onShow: function() { // Do something when show. }, onHide: funct

微信小程序实现简单计算器

背景:最近在学习小程序开发,刷到了一个教学视频做计算器.作者强调在微信小程序里面无法执行eval方法 .想用Function进行构造,还是不被执行. 我好奇的搜了下发现很多人都碰到这个问题,就想自己实现一下,但是现实非常打脸,想了一天多时间,也没找到突破口,最后就在网上找到了 zl_calculator_zl,借鉴了先进思想,也就有了这篇文章. 思路来源于:https://github.com/zhangluzhanglu/zl_calculator_zl 博主提供了一套支持()运算符的计算类并

微信小程序入门学习-- 简易Demo:计算器

简单学习下微信小程序 官网 简易教程 · 小程序 https://mp.weixin.qq.com/debug/wxadoc/dev/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行程序,点击添加项目,弹窗,可以选无AppId,选择程序路径,勾选quick start. app.json 配置文件 wxxml --相当于html wxss--相当于css 在pages文件夹新建文件夹 修改配置app.json 这样系统启动时会运行call文件项目 "pages":[

python,图形界面编程,tkinter,实现一个最简单的加法计算器的图形界面小程序

from tkinter import * def Calculate(): a1 = int(text1.get('1.0', END)) # 从行首取到行尾 a2 = int(text2.get('1.0', END)) a3 = a1 + a2 text3.delete('1.0', END) text3.insert(INSERT, a3) root = Tk() root.title('myTitle') label1 = Label(root, text = 'First Numbe