锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

计算器小程序设计y

时间:2022-10-18 17:30:00 mr754二极管

姓名 :易小琴

学院:应用技术学院:

专业班:2020级大数据技术与应用

导师:张彤

日期:2022/6/7

背景:随着时代社会的发展,简单的数字运算蕴含在我们生活之中 ,计算是不可或缺的一部分。

意义:通常在每个人的现实生活中,也会遇到会计,买蔬菜,一些琐碎的小事将不可避免地使用计算。为了让每个人在生活中都有一点帮助,所以设计一个简单的计算器小程序来解决人们生活中的琐事,使用小程序可以解决生活中的数学问题,为用户提供方便的服务。

第一章 绪论

本章详细介绍了我选择该项目进行毕业设计的原因。作为人们生活中不可缺少的计算,我首先从计算器的背景和研究意义进行详细分析,然后对计算器小程序的研究内容进行具体分析,最后从具体案例进行详细分析。

1.背景及研究意义:

从1642年开始,随着人们经济的快速发展,人们的生活发生了巨大的变化。1642年,19岁的法国伟大科学家帕斯卡引用了算盘的原理,发明了第一台机械计算器。他的计算器中有一些连齿轮。一个转动十个齿轮会转动另一个齿轮。人们可以像电话号码盘一样拨打数字,计算结果会出现在另一个窗口,但只能进行加减计算。1694年,莱布尼兹在德国将其改进为乘除计算。电子计算器直到20世纪50年代末才出现。1642年,19岁的法国伟大科学家帕斯卡引用了算盘的原理,发明了第一台机械计算器。他的计算器中有一些连锁齿轮。一个转动十个齿轮会转动另一个齿轮。人们可以像电话号码盘一样拨打数字,计算结果会出现在另一个窗口,但只能进行加减计算。1694年,莱布尼兹在德国将其改进为乘除计算。电子计算器直到20世纪50年代末才出现。为了让人们更快地掌握数学计算和知识,发挥更方便、更方便的生活技能。人们经常每天使用计算,如超市购物、购物、结算工资、学习数学知识,所以我们可以看到,我们的生活不可避免地不能计算,也不能处理计算、数学。

计算器小程序是一种具有计算功能的工具,它被用作一种简单的方法Python,正则表达式、递归、简单编程。用户可以使用计算器小程序来解决生活中所需的简单数学知识和计算问题,减少人们生活中的麻烦,提高人们的幸福指数,为小学生和初学生的数学奠定良好的基础,为人们提供简单的帮助。

1.论文研究的主要内容:

使用计算器程序来解决数学问题,而普通的手持计算器通常由操作员、控制器、存储器、键盘显示器、电源和一些可选的外围设备和电子配件组成。

低档计算器数字逻辑电路实现了简单的串行操作,其随机存储器只有一两个单元,供累积存储。

高档计算器各种复杂的操作程序由微处理器和只读存储器实现,有更多的随机存储单元存储输入程序和数据。键盘是计算器的输入部件,通常采用接触式或传感式。为了减小计算器的尺寸,一键通常有多种功能。显示器是计算器的输出部件,包括发光二极管显示器或液晶显示器。这种情况下,我们不能随身携带,或者保管不当也会给自己造成损失,所以使用这个小程序方便快捷,也是开发计算器小程序的主要目的。

1.3现状:

从目前的发展来看,计算 六器广泛应用于各个方面。

使用计算器进行估算。如果你在八年级使用有理数接近无理数的想法,你需要使用有理数近似的计算器来表示无理数;在九年级的第二册中,借助计算器更快地研究一元一次方程的近似解。

利用计算器探索法律。如在七年级上使用计算器验证、探索"黑洞数"的规律。

使用计算器处理更复杂的数据。计算器为数学应用提供了先进的计算工具,更容易处理实际数据,特别是从随机实验中获得的数据,为中学数学应用提供了广阔的空间。例如,鼓励学生在八年级使用计算器轻松计算一组数据的标准差和方差,有利于分析数据和研究数据的波动。

使用计算器产生模拟实验的随机数。如九年级"生**相同的概率"内容可以通过计算器产生随机数进行模拟实验。可以看出,计算器可以将静态变为动态,将抽象的东西具体化、直观化,在一定程度上延伸人们的思维。可以看出,使用计算器是一种先进的计算工具,不仅可以节省学生大量时间学习其他更有价值的内容,还可以激发他们的学习兴趣。

1.4论文结构:

第一章阐述了选择计算器程序的背景、意义和主要内容。第二章介绍了制作计算器小程序所使用的关键技术。第三章分析了小程序的功能需求和可行性。第四章介绍了小程序的结构、功能和相关设计。第五章显示了小程序的功能实现。第六章分析了小程序的测试和测试结果。

第七章是设计过程。

第二章 关键技术介绍

这个项目是通过的

小程序主要采用正则表达式,递归,Python实现技术等。

2.1 正则表达式介绍

正则表达式(Regular Expression)包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

正则表达式使用单个字符串来描述和匹配一系列符合句法规则的字符串。

正则表达式很麻烦,但它很强大。学习后的应用程序不仅会提高效率,还会给你带来绝对的成就感。只要你仔细阅读本教程,并在应用程序中提供一定的参考,掌握正则表达式就不是问题。

许多程序设计语言支持使用正则表达式进行字符串操作。

构建正则表达式的方法与创建数学表达式的方法相同。也就是说,小表达式可以与多个元字符和操作符相结合,以创建更大的表达式。正则表达式组件可以是单个字符、字符集合、字符范围、字符之间的选择或所有这些组件的任意组合。

正则表达式是由普通字符组成的 a 到 z)以及特殊字符(称为"元字符")组成的文本模式。该模式描述了搜索文本应匹配的一个或多个字符串。正则表达式作为模板,匹配搜索的字符串。

许多程序设计语言支持使用正则表达式进行字符串操作。例如,在Perl在内部建立了一个强大的正则表达式引擎。正则表达式的概念最初是由Unix工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala 、PHP、C# 、Java、C 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。正则表达式通常缩写为regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

正则表达式的鼻祖可神经系统工作原理的早期研究。美国新泽西州Warren McCulloch和出生在美国底特律的和Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。

在1951 年,一个名字Stephen Kleene他在数学科学家Warren McCulloch和Walter Pitts在早期工作的基础上,发表了一篇题为《神经网事件表达法》的论文,描述了模型,引入了正则表达的概念。正则表达式被用作描述正则集代数的表达式,因此使用了正则表达式一词。

一段时间后,人们发现这项工作可以应用于其他方面。1968年,Unix之父Ken Thompson将此结果应用于计算搜索算法的一些早期研究。Ken Thompson将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其着作《Mastering Regular Expressions (2nd edition)》(中文版翻译:精通正则表达式,已出版到第三版)进一步阐述。如果你想了解更多关于正则表达式的理论和历史,我建议你读这本书。

此后,正则表达式被广泛应用于各种领域UNIX或类似于UNIX的工具中,如大家熟知的Perl。Perl正则表达式来源于Henry Spencer编写的regex,后来演变成了pcre(Perl兼容正则表达式Perl Compatible Regular Expressions),pcre是一个由Philip Hazel为许多现代工具开发的图书馆。正则表达式的第一个实用应用程序是Unix中的 qed 编辑器。

然后,正则表达式在各种计算机语言或应用领域得到了广泛的应用和发展,演变成了计算机技术森林中美丽而美丽的百灵鸟。

以上是对正则表达式起源和发展的历史描述。如今,正则表达式在编辑器和基于文本的搜索工具中仍然占有非常重要的地位。

2.2 递归

递归定义是数学逻辑和计算机科学中使用的一种定义方法,使用定义对象本身来定义它(简单地说,它是自我复制的定义)。递归定义(recursive definition)也被称为归纳定义,一种实质性的定义,是指递归定义的概念,但也有区别。

在递归定义中,使用被定义对象本身来定义,而归纳定义是使用被定义对象已定义的部分来定义尚未定义的部分。然而,使用递归定义的函数或集合可以通过递归定义的内容证明其性质。

由两部分组成:

初始条件:列出哪些个体属于给定的集合,

归纳条件:条件中列出的个体属于给定集合,则另一些个体也属于该集合。

由三个部分构成:基本情况的定义,递归法则和递归结束的情况。如果定义的对象是无限的,那么可以省略第三个部分(递归结束的情况)。

2.3Python

Python由荷兰数学和计算机科学研究学会的吉多 范罗苏姆于1990 年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,  随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 

Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码 。 

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

第三章 系统分析

本章将对计算器小程序进行需求分析。首先对系统进行功能分析。然后对系统进行数据需求分析。最后确定系统开发环境并从多个角度对系统进行可行性分析。

3.1功能需求分析

计算器是生活中必不可少的工具之一,不管我们是哪个行业哪个单位的,都可能使用到计算器,计算器的种类上大家也都了解的非常多了,这里我们说一说计算器在生湖中都有哪些重要作用呢?
    在重要作用上,我们的计算器主要是使用在各种的生产生活中,生产中离不开计算,不管是计算成本还是计算别的项目,计算必不可少,在生活中,我们时时刻刻离不开计算,即使是我们出门买东西,也存在着计算,这就是计算的重要作用。对于学生而言,计算器就更重要了,是一种我们一直使用的学习工具之一。
    计算器在作用上,主要是用来计算各种数字,尤其是我们需要的各项数字,计算器的种类不同,在计算上也略有不同,比如,我们在使用普通的计算器时,就只能计算一些普通的加减乘除,如果是使用科学计算器,在使用上则可以做很多的运算,尤其是一些比较高深的计算,在生活中的计算,我们计算什么,就需要使用哪种计算器,比如,计算房贷,自然使用房贷计算器,计算养老保险,则使用养老保险专用计算器,这就是计算器的应用。

  使用在线计算小工具成为了越来越多人的选择。现如今的网络发展十分的迅速,各式各样的计算也随之到来。网络时代的计算不同于普通的计算和输入,他必须使输入完整无误后才能进行正确的数据分析和计算。如单纯的靠脑力劳动和人工数据分析的话,那么计算的任务是根本不能完成的,这是就要选择更好的计算工具了。
    根据不同的计算方式和方法选择不同的在线计算工具。这是现在最新的计算方式。无论你是单纯的干会计这个自如以来就有的账房工作,还是从事超大型的数据分析这个可以时代的数据分析工作,都离不开的就是计算。在线的计算小工具会很好的帮助那些需要的人进行数据运算和数据分析,并且能够更好更快的进行数据处理。
    在线计算在当今社会越来越重要。不同的工作都回头有相同的地方,那就是进行计算。在以前的时候人们习惯拿着一个计算器在那里费力的按着,还经常担心按错了。现如今只要选择了在线进行计算,把所有的数据进行输入,只要设计好运算公式,就能后在很多的时间内得出正确的运算结果,这样就会更好的帮助人们工作了。

3.2数据流程分析

3.3可行性分析

数学是伴随我们学习过程的一门重要科目,在没上大学之前,每一个学生都需要学习数学,跟数字打交道。即使上了大学之后,除了某些专门的文科专业,很多学生仍然需要学习数学,在选择工作方向的时候,对数学有兴趣的人或是有天赋的人,仍然会从事数学方向的工作。说到底,就算不学习数学,我们的生活中仍然免不了要和数字正面交锋,数字作为一种符号,也是为了方便我们的生活而存在。一些简单的加减乘除算法我们在学习了数学知识之后就可以自主进行,但一些相对较大、较为复杂的算法,如果我们自己进行运算的话则是耗时耗力,还不能保证一定正确,所以计算器就应运而生。
计算器是专门负责计算的机器,最早出现的计算器是我们现在所使用的电脑。当时刚刚开发出来的电脑体积非常庞大,而且只能用来计算。随着社会科技的慢慢发展,电脑开始精简、体积开始变小,同时功能也开始变多。计算器也是一样,从最初庞大的电脑变的越来越小巧,同时计算的功能也越来越多。
计算器的外形和功能上也有一定的演变过程。如今我们使用的计算器有很多种。有专门用来计算简单的加减乘除的,这样的计算器比较适合日常使用,因为日常生活中的数字计算涉及不到太多高级和复杂的算法,只要保证运算的准确度和正确性就可以了。还有较为高级的计算器,这种计算器有很多种计算的功能,诸如阶乘等复杂的算法在这样的计算器上都可以得出运算结果,相应的是这样的计算器通常比较小巧,方便携带。这种计算器在学生一族当中最为常见,尤其是在高中生当中。高中生所学的数学算法内容比较多,而且要求运算的准确率也比较高,学生在自己运算的过程中往往会出错,但如果使用计算器的话,如果能够学会怎样按键并有一定的细心和耐心,通常不会出现错误,这也就证明了计算机的重要作用。而且很多制作商还会在计算器的外观制作上下功夫,不再是不怎么美观的深颜色,有的计算器还拥有粉色、蓝色的外衣,非常吸引购买者的目光。
还有一种我们经常使用的计算器,那就是各种手机都会自带的计算器功能。现如今,手机已经成为我们生活中必不可少的一种工具,不管是社交还是玩游戏,手机都展现了它非凡的实力和作用。不管是传统的功能简易的老年机,还是如今功能复杂的智能机,都会带有计算器的功能,有些手机当中的计算器功能也相当全面,能够计算的算法也相当多,这也就让我们在计算的过程中更加便捷,不用再专门随身携带一个计算器,只要有手机,在需要运算的时候就可以随时随地的拿出来使用,十分方便。
但是计算器也有一定的缺点。因为机器的存在大大弱化了人类的主动性,所以在长期使用计算器过后,人们本身的计算能力也会减弱,这也就是为什么高中课堂并不是非常允许计算器走进课堂的原因,学生们需要通过自主运算的过程来加深对所学知识的认识,而且运算的过程本身也是启发学生思维的重要方式。所以,计算器的运用也是双刃剑,合理利用才能造福人类。

 为了解决传统计算器的缺点,开发了计算器小程序。

第四章 系统设计

4.1体系结构设计

随着软件工程的不断进步和规范以及面向对象编程思想的应用,计算器小程序的双层架构设计分为输入架构和输出架构。

计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件,通过人工或机器设备组成。

低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。键盘是计算器的输入部件,一般采用接触式或传感式。为减小计算器的尺寸,一键常常有多种功能。显示器是计算器的输出部件,有发光二极管显示器或液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。计算器选用的外围设备有微型打印机、盒式磁带机和磁卡机等。

4.2功能模块设计

计算机在运行时,先从内存中取出第一指令, 通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。

程序与数据一样存贮, 按程序编排的顺序,一步- 步地取出指令, 自动地完成指令规定的操作是计算机最基本的工作原理。这一原理最初是由美籍匈牙利数学家冯诺依曼于1945年提出来的,故称为冯诺依曼原理。

第五章 系统实现

5.1小程序前后台主要功能实现

5.1.1计算实验:老版计算器中,M是memory的意思,M-减去储存值,M+加上储存值,MRC等于MR+MC,MC清楚存储,MR调用存储。

小程序计算器:import re,os,sys
 
def compute_exponent(arg):
    """ 操作指数
    :param expression:表达式
    :return:计算结果

  val = arg[0]
    pattern = re.compile(r'\d+\.?\d*[\*]{2}[\+\-]?\d+\.?\d*')
    mch = pattern.search(val)
    if not mch:
        return
    content = pattern.search(val).group()
 
    if len(content.split('**'))>1:
        n1, n2 = content.split('**')
        value = float(n1) ** float(n2)
    else:
        pass
 
    before, after = pattern.split(val, 1)
    new_str = "%s%s%s" % (before,value,after)
    arg[0] = new_str
    compute_exponent(arg)
 
def compute_mul_div(arg):
    """ 操作乘除
    :param expression:表达式
    :return:计算结果
    """
 
    val = arg[0]
    pattern = re.compile(r'\d+\.?\d*[\*\/\%\/\/]+[\+\-]?\d+\.*\d*')
    mch = pattern.search(val)
    if not mch:
        return
    content = pattern.search(val).group()
 
    if len(content.split('*'))>1:
        n1, n2 = content.split('*')
        value = float(n1) * float(n2)
    elif len(content.split('//'))>1:
        n1, n2 = content.split('//')
        value = float(n1) // float(n2)
    elif len(content.split('%'))>1:
        n1, n2 = content.split('%')
        value = float(n1) % float(n2)
    elif len(content.split('/'))>1:
        n1, n2 = content.split('/')
        value = float(n1) / float(n2)
    else:
        pass
 
    before, after = pattern.split(val, 1)
    new_str = "%s%s%s" % (before,value,after)
    arg[0] = new_str
    compute_mul_div(arg)
 
 
def compute_add_sub(arg):
    """ 操作加减
    :param expression:表达式
    :return:计算结果
    """
    while True:
        if arg[0].__contains__('+-') or arg[0].__contains__("++") or arg[0].__contains__('-+') or arg[0].__contains__("--"):
            arg[0] = arg[0].replace('+-','-')
            arg[0] = arg[0].replace('++','+')
            arg[0] = arg[0].replace('-+','-')
            arg[0] = arg[0].replace('--','+')
        else:
            break
 
 
    if arg[0].startswith('-'):
 
        arg[1] += 1
        arg[0] = arg[0].replace('-','&')
        arg[0] = arg[0].replace('+','-')
        arg[0] = arg[0].replace('&','+')
        arg[0] = arg[0][1:]
    val = arg[0]
 
    pattern = re.compile(r'\d+\.?\d*[\+\-]{1}\d+\.?\d*')
    mch = pattern.search(val)
    if not mch:
        return
    content = pattern.search(val).group()
    if len(content.split('+'))>1:
        n1, n2 = content.split('+')
        value = float(n1) + float(n2)
    else:
        n1, n2 = content.split('-')
        value = float(n1) - float(n2)
 
    before, after = pattern.split(val, 1)
    new_str = "%s%s%s" % (before,value,after)
    arg[0] = new_str
    compute_add_sub(arg)
 
 
def compute(expression):
    """ 操作加减乘除
    :param expression:表达式
    :return:计算结果
    """
    inp = [expression,0]
 
    # 处理表达式中的指数
    compute_exponent(inp)
 
    # 处理表达式中的乘除求余等
    compute_mul_div(inp)
 
    # 处理表达式的加减
    compute_add_sub(inp)
    if divmod(inp[1],2)[1] == 1:
        result = float(inp[0])
        result = result * -1
    else:
        result = float(inp[0])
    return result
 
 
def exec_bracket(expression):
    """ 递归处理括号,并计算
    :param expression: 表达式
    :return:最终计算结果
    """
    pattern = re.compile(r'\(([\+\-\*\/\%\/\/\*\*]*\d+\.*\d*){2,}\)')
    # 如果表达式中已经没有括号,则直接调用负责计算的函数,将表达式结果返回,如:2*1-82+444
    #if not re.search('\(([\+\-\*\/]*\d+\.*\d*){2,}\)', expression):
    if not pattern.search(expression):
        final = compute(expression)
        return final
    # 获取 第一个 只含有 数字/小数 和 操作符 的括号
    # 如:
    #    ['1-2*((60-30+(-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    #    找出:(-40.0/5)
    content = pattern.search(expression).group()
 
     # 分割表达式,即:
    # 将['1-2*((60-30+(-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    # 分割更三部分:['1-2*((60-30+(    (-40.0/5)      *(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    before, nothing, after = pattern.split(expression, 1)
 
    print('before:',expression)
    content = content[1:len(content)-1]
 
    # 计算,提取的表示 (-40.0/5),并活的结果,即:-40.0/5=-8.0
    ret = compute(content)
 
    print('%s=%s' %( content, ret))   
# 使用 __name__ 的目的:
#   只有执行 python index.py 时,以下代码才执行
#   如果其他人导入该模块,以下代码不执行
if __name__ == "__main__":
    flag = True
 
    os.system('clear')                                                     ###清屏###
 
    print('\n================================================================')
    print('\033[33m 欢迎使用计算器 :\033[0m')
    print('\n================================================================')
 
     while flag:
        calculate_input = raw_input('\033[32m请输入计算的表达式 | (退出:q)\033[0m')
        calculate_input = re.sub('\s*','',calculate_input)
        if len(calculate_input) == 0:
            continue
        elif calculate_input == 'q':
            sys.exit('退出程序')
        elif re.search('[^0-9\.\-\+\*\/\%\/\/\*\*\(\)]',calculate_input):
            print('\033[31m 输入错误,请重新输入!!!\033[0m')
        else:
            result = exec_bracket(calculate_input)
            print('the expression result is %s' % result)

5.2计算管理:

5.3实现:

M-:从存储器内容中减去当前显示值,同时中断数字输入,是计算结果并用已储存的数字减去目前的结果,如存贮器中没有数字,按M-则存入负的显示屏数字。


MS:将显示的内容存储到存储器,存储器中原有的数据被更新。.

MR:按下此键将调用存储器内容,把存储器中的数值读出到屏幕作为当前数值参与运算。MC:按下时清除存储器内容屏幕"M"标志消除)。

MRC:第一-次按下此键将调用存储器内容,第二次按下时清除存储器内容。
 

第六章 系统测试

6.1测试用例

 

  

 6.2测试结果分析

在网站完成后,及时的对网站进行一系列的测试,通过一次次的测试来去发现程序中的问题。首先对各个功能模块进行了独立的测试。然后再对整个网站进行测试。测试用户的登陆和注册功能,商品的显示、购买,以及管理员在网站后台对网站的各部分进行管理,根据测试结果得知各个功能模块都达到了设计的要求。各个模块在整个系统中都能完成各自的功能,相互之间的连接也很顺利。对数据库的增加、删除、更新、查看操作也都能够顺利的完成。经过测试整个网站的功能都达到了预期的要求。在测试过程中发现的程序错误等也得到了及时的解决,从而保证了后期系统的稳定运行。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章