python 简单编写的计算器程序

计算器思路



1、要求输入公式

2、检测公式是否包含字母

3、如果包含字母则需要重新输入,否则进行下一步运算

4、检测是否存在括号,如果存在括号,把括号里面的值进行优先级运算,然后赋值到原位,没有则按照优先级运算,取出最后运算结果



流程图



具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘weibinf‘
import re   #导入模块
def kuohao(self):   #判断是否存在括号
    self = list(self)
    if self.count(‘)‘) != 0 :
        for k,v in enumerate(self):
            if v == ")":
                x = k
                a = self[0:k]
                q = a.count("(")
                qq = 0
                for k,v in enumerate(a):
                    if v == "(":
                        z = k
                        qq +=1
                        if q == qq :
                            b = self[z+1:x]
                            c = str(fushu(b))
                            del self[z:x+1]
                            self.insert(z,c)
                            return kuohao(self)
    else:
        return fushu(self)

def fushu(self):#取出所有运算符和相应运算数字
    temp = ‘‘
    expp = []
    self = list(self)
    i = 0
    for k,v in enumerate(self):
        if v == ‘+‘ or v == ‘-‘ or v == ‘*‘ or v == ‘/‘:
            if k == 0 or self[k-1] == "+" or self[k-1] == "-" or self[k-1] == "*"  or self[k-1] == "/" :
                temp += v
            else:
                expp.append(int(temp))
                expp.append(v)
                temp = ‘‘
        else:
            temp += v
        if i == len(self) -1 :
            expp.append(int(temp))
        i +=1
    return zhengshu(expp)

def get_aob(a, o, b):#运算方式
    if o == ‘+‘:
        return a + b
    elif o == ‘-‘:
        return a - b
    elif o == ‘*‘:
        return a * b
    elif o == ‘/‘:
        return a / b

def zhengshu(exp_list):#运算公式
    if len(exp_list) == 1:
        return exp_list[0]
    else:
        q = exp_list.count("*")
        w = exp_list.count("/")
        if q != 0 or w != 0:
            for k,v in enumerate(exp_list):
                if v == "*" or v == "/":
                    a = exp_list[k - 1]
                    o = exp_list[k]
                    b = exp_list[k+1]
                    del exp_list[k]
                    del exp_list[k]
                    exp_list[k-1] = get_aob(a, o, b)
                    return zhengshu(exp_list)
        else:
            for k,v in enumerate(exp_list):
                if v == "+" or v == "-":
                    a = exp_list[k - 1]
                    o = exp_list[k]
                    b = exp_list[k+1]
                    del exp_list[k]
                    del exp_list[k]
                    exp_list[k-1] = get_aob(a, o, b)
                    return zhengshu(exp_list)
  #  return zhengshu(exp_list)

while True:
    calc = raw_input("\033[31m请输入需要计算的公式: \033[0m").replace(‘ ‘,‘‘).strip()   #获取用户输入
    a = re.findall(‘[a-zA-Z]+‘,calc) #正则匹配是否存在字母
    if not len(calc) == 0 : #判断用户输入是否为空
        if len(a) == 0: #判断用户输入字符串是否存在字母
            print "\033[31m程序运算结果: \033[0m",kuohao(calc)
            print ‘\033[43;1mpython计算器运算结果:\033[0m‘,eval(calc)
        else:
            print "\033[31m没有正确输入,运算字符串包含字母。\033[0m"
    else:
        print "\033[31m没有正确输入,请重新输入。。。\033[0m"
        print "\033[31m-\033[0m" * 50
时间: 2024-10-24 22:34:52

python 简单编写的计算器程序的相关文章

用Python编写简单的发红包程序和计算器原理

用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成分为单位 ret = random.sample(range(1,money),num-1) #在最低钱数1分与总钱数之间生成人数减1个数作为数轴的节点 ret.sort() #对列表进行排序 ret.insert(0,0) ret.append(money) for i in range(len(

完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input("please input a number:"))except ValueError: print("第一个运算数字输入非数字") try: b=int(raw_input("please input another number:"))except Val

《Python Network Programming Cookbook》读书笔记1---套接字, IPv4, 简单的Client/Server程序

这一部分主要介绍python中socket模块的相关内容,socket即套接字. socket是使用TCP/IP协议的应用程序通常采用的应用编程接口,它位于运输层和应用层之间,起源于UNIX,由于遵从UNIX“一切皆文件的”思想故socket可看作一种特殊的文件,对其的操作基本可以视为读写I/O.打开.关闭.关于套接字的基本概念@吴秦的Linux Socket编程(不限Linux)写的很详细,大家可以参考. 在下面列出的各个部分中我将先贴出代码,然后对其进行解释. 通过python3获得本机名和

Python编写简易木马程序(转载乌云)

Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 +JEDI(python自动补全插件)来撸代码,安装配置JEDI插件可以参照这里: /tips/?id=4413 首先准备好我们需要的依赖库,python hook和pythoncom. 下载安装python hook 下载安装pythoncom模块:

Python写的网络爬虫程序(很简单)

Python写的网络爬虫程序(很简单) 这是我的一位同学传给我的一个小的网页爬虫程序,觉得挺有意思的,和大家分享一下.不过有一点需要注意,要用python2.3,如果用python3.4会有些问题出现. python程序如下: import re,urllib strTxt="" x=1 ff=open("wangzhi.txt","r") for line in ff.readlines(): f=open(str(x)+".txt&

编写一个简单的jdbc例子程序

1 package it.cast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class Base { 10 11 public static void main(String[] args) th

纯javascript代码编写计算器程序

今天来分享一下用纯javascript代码编写的一个计算器程序,很多行业都能用到这个程序,例如做装修预算.贷款利率等等. 首先来看一下完成后的效果: 具体代码如下:(关注我的博客,及时获取最新WEB前端开发源代码) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

VC++编写简单串口上位机程序

转载: http://blog.sina.com.cn/s/articlelist_1809084904_0_1.html VC++编写简单串口上位机程序 串口通信,MCU跟PC通信经常用到的一种通信方式,做界面.写上位机程序的编程语言.编译环境等不少,VB.C#.LABVIEW等等,我会的语言很 少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相 当蹩脚的C++写出了一个简单的串口上位机程序,分享一下

[Boost]用asio编写简单的socket通信程序

boost/asio库中封装了很多关于scoket的函数,当然,asio库还包含很多底层的库. 我们可以用socket编写一个基于UDP协议的黑框通讯程序. 要想使用asio里面的函数,大多都需要先创建一个io_service对象,然后通过这个serveice来构造不同的对象,所以第一步,我们得创建两个对象: boost::asio::io_service io_service; boost::asio::ip::udp::socket udp_socket(io_service); 这里唯一需