[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.增加连接成功之前,不可按压 效果图: '''''''''''''''''''''' ...
随机推荐
- 51nod 1281 二分
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1281 隐藏话题 1281 山峰和旗子 题目来源: Codility 基准 ...
- jar包作用
hibernate中jar包的作用 (1)hibernate3.jar:Hibernate的核心库,没有什么可说的,必须使用的jar包 (2)cglib-asm.jar:CGLIB库,Hibernat ...
- Highcharts中更新series的5种方法
用Highcharts画图时,经常需要更新所画的图表,最常见的就是改变数据以更新图表.在Highcarts中,数据对应的参数是series.这儿就以图1的柱状图为例,列举如何更新series的5种方法 ...
- Mybatis_总结_03_用_动态SQL
一.前言 MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...
- BEC listen and translation exercise 6
能听懂自己的录音,说明发音还行,可惜听不懂... Another problem is that the members of the Biramichi fishing cooperative ar ...
- STL的erase函数和lower_bound
前提摘要: [1]一般我们的区间是左闭右开,如下面例子2. [2]erase函数谨慎使用. [3]map也是有序保存的. [erase] 1,删除字符串的首字母: string s="ecu ...
- numpy、scipy、pandas
以下分别是numpy.Scipy.pandas的简介.虽然这些包提供的一些结构比python自身的“更高级.更高效”,更高级是因为它们能完成更高级的任务,但是,学习的时候尽量不要和python割裂开认 ...
- Redis底层探秘(四):整数集合及压缩列表
整数集合 整数集合(intset)是集合键的底层实现之一,当一个集合只包含 整数值元素,并且这个集合的元素数量不多时,Redis就会使用郑书记和作为集合键的底层实现. 整数集合的实现 整数集合是red ...
- GO语言heap剖析及利用heap实现优先级队列
GO语言heap剖析 本节内容 heap使用 heap提供的方法 heap源码剖析 利用heap实现优先级队列 1. heap使用 在go语言的标准库container中,实现了三中数据类型:heap ...
- 【LeetCode】005. Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...