[Python Study Notes]计算器
# -------------------------------------------------------------------------------------
# @文件: 计算器.py
# @工程: blog
# @时间: 2018/3/17 20:14
# @作者: liu yang
# @博客: www.liuyang1.club
# @邮箱: liuyang0001@outlook.com
# ------------------------------------------------------------------------------------
# 编码格式
# -*- coding: utf-8 -*-
# Python版本
# #!/usr/bin/python3
import re
exprs = '' # 表达式
sum = 0 # 结果
flag = 'new' # 计算标志位
def License():
print("\
**********控制台计算器***********\n \
·支持+-×/运算,指数运算(^),\n \
·支持包含括号的长表达式输入\n \
·欢迎访问博客:www.liuyang1.club \n \
********CopyRight(c) 2018 ********\n \
")
def BracketUnbalanceCheck(str_in):
num = 0
for i in str_in:
if i == '(':
num += 1
elif i == ')':
num -= 1
if num != 0: # 括号不平衡
print("错误:输入的括号不平衡,请重新输入\n")
return 1
else: # 括号平衡
return -1
def CharErrorCheck(str_in):
if re.findall(r'[&a-zA-Z<>,?~!@#$%";:]', str_in): # 正则表达式校验输入字符串的合法性
print('错误:表达式包含非法字符,请重新输入\n')
return 1
else:
return -1
def InputExpression():
global exprs
while not (CharErrorCheck(exprs) == -1 and BracketUnbalanceCheck(exprs) == -1): # 直到得到一个合法的表达式
exprs = input("继续输入表达式:\n")
m = re.match(r'^[\^/\*+\-\\]\w*', exprs) # 匹配输入字符串的第一个字符是否是运算符,判断继续运算还是开始新计算
if m:
return 'continue'
else:
return 'new'
def Compute(flag):
global exprs
global sum
exprs = exprs.replace('^', '**') # 将^替换为**
if flag == 'continue':
exprs = str(sum) + exprs
try:
sum = eval(exprs)
print("计算式:", exprs)
print(exprs, "= " + str(sum))
except SyntaxError:
print("错误:继续计算时出现语法错误,程序返回\n")
except ZeroDivisionError:
print("错误:除数不能为0,程序返回\n")
def main():
global exprs, flag
License()
while True:
exprs = input("输入表达式:")
flag = InputExpression()
Compute(flag)
if __name__ == '__main__':
main()
[Python Study Notes]计算器的更多相关文章
- [Python Study Notes]匿名函数
Python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的.在Python中,lambda作 ...
- [Python Study Notes]字符串处理技巧(持续更新)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]with的使用
在 Python 2.5 中, with 关键字被加入.它将常用的 try ... except ... finally ... 模式很方便的被复用.看一个最经典的例子: with open('fil ...
- [Python Study Notes]实现对键盘控制与监控
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]实现对鼠标控制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]批量将wold转换为pdf
本文代码,由原ppt2pdf.py进行改写 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]批量将ppt转换为pdf v1.0
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]CS架构远程访问获取信息--SERVER端v2.0
更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 ''''''''''''''''''''''''''' ...
- [Python Study Notes]CS架构远程访问获取信息--Client端v2.0
更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 效果图: '''''''''''''''''''''' ...
随机推荐
- Composer安装php插件包中有哪些坑
Composer安装php插件包中有哪些坑 一.总结 一句话总结:不要盲从扩展官方的composer安装命令,有时候也会出错 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 ...
- Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}
Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi ...
- Windows7+VS2008 下编译Subversion 1.8.3
一.需要的软件包 1.python-2.7.5.msi http://www.python.org/ 2.ActivePerl-5.8.8.822-MSWin32-x86-280952.msi h ...
- java学习笔记--常用类
一.Math类:针对数学运算进行操作的类 1.常用的方法 A:绝对值 public static int abs(int a) B:向上取整 public static double ceil( ...
- @angular/cli项目构建--interceptor
JWTInterceptor import {Injectable} from '@angular/core'; import {HttpEvent, HttpHandler, HttpInterce ...
- Engineer manager
your tasks and responsibilities Position: Major Tasks Lead site project management to ensure all p ...
- java 网页 保存上传文件
网页请求提交到另外一个jsp 进行处理 index.jsp <%@ page language="java" import="java.util.*" p ...
- 《Javascript高级程序设计》阅读记录(七):第七章
<Javascript高级程序设计>中,2-7章中已经涵盖了大部分精华内容,所以摘录到博客中,方便随时回忆.本系列基本完成,之后的章节,可能看情况进行摘录. 这个系列以往文字地址: < ...
- LeetCode Reverse Words in a String III
原题链接在这里:https://leetcode.com/problems/reverse-words-in-a-string-iii/#/description 题目: Given a string ...
- MAC的VMWare CentOS 6.8命令笔记
1.图形界面切换到命令行界面 真正的Linux切换界面使用命令, Ctrl + Alt + Fn (1,2,3,4,5,6) Wondows平台 Ctrl + option + F ...