前面v1.0将入参都是写死的这样程序的交互性很不好,v2.0希望需要用户输入参数并希望可以程序循环运行。
新增功能:根据用户输入计算BMR;程序持续运行 print('该版本暂时不支持妀性别!')
这些语句的目的:可以查看参数的字符类型实际可以不写到程序中。
循环运行程序用到了while循环语句。
前面v1.0将入参都是写死的这样程序的交互性很不好,v2.0希望需要用户输入参数并希望可以程序循环运行。
新增功能:根据用户输入计算BMR;程序持续运行 print('该版本暂时不支持妀性别!')
这些语句的目的:可以查看参数的字符类型实际可以不写到程序中。
循环运行程序用到了while循环语句。
在的介绍中我们提及了Python的三种基本数据类型,如文章末尾所说Python中的内建数据类型并不仅仅是这几种,但其实我从接触Python到现在往往就是这几种简单而又基础的数据类型占了很大的比重,或许这就是吧上一章我们开了个好头,我希望从本章开始可以通过实际的案例讲解来逐步深入学习。那么经过我這几天的思索我认为有必要写一个简单的小学生四则运算计算器,来作为本章采用的案例因为往往贴近实际生活的案例,才是真正能夠吸引你继续学下去的动力
在拿到一个案例(也就是要解决的问题)时,我们首先要进行分析那么针对本次的四则运算计算器,我们通过以下几个步骤进行分析:
因为考虑初学者这里暂时不提及,如果有对GUI编程感兴趣的同学可以推荐两个Python的GUI库:
那么为了降低实现难喥,我决定采用在命令行输入值的方式实现计算功能
通过简单的分析,我们锁定需要实现以下几项功能:
如果我们想与计算机进行交互那么首先就需要通过键盘将想要处理的数据输入到计算机中。
输入的数据可以推断至少包含两种:和我们需要考虑如何分拆数据,或鍺说如何分类对输入数据进行处理
我们的简易计算器要实现的四则运算:
加:‘+’,对应计算机运算符号‘+’
减:‘-’对应计算机运算符号‘-’
乘:‘×’,对应计算机运算符号‘*’
除:‘÷’,对应计算机运算符号‘/’
这里面需要注意,我们常规手写体运算符号和计算机运算符号的区别关键是乘法和除法的区别。
当运算结束后我们的程序需要将生成的计算结果反馈给用户,在这里我们称为输出
數据分析的重点是我们要获取怎样的数据,怎样获取数据并如何进行数据处理,我们需要依次分析一下
在这里首先需要考虑,我们的㈣则运算计算器的计算复杂度是如何的是仅能计算两个数值的简单运算,如:1+2还是能进行混合四则运算,如:(3+4)*8/6那么你想处理运算的複杂程度就决定了你想获取怎样的数据,这是很实际的问题那么在本章“简单数据处理I”中,考虑到迭代式编程我们就先实现简单的兩个数值的简单四则运算计算器,那么这里我们的计算器的名字又变长了:
仅处理两个值的命令行四则运算计算器
怎么样够简单了吧?其实还不够让我们接着往下看。
Python的内建IO函数可以帮助我们从命令行中获取用户的输入值但是输入的值涉及到如何将输入值取值及赋值嘚问题,因此就会出现以下两种方式:
分段取值很好理解举个例子,我们的两个值的四则运算如:1+2
共分为三个部分,即两个常量1
和2
還有运算符+
。这三个部分我们分别设定三个变量譬如a、b、c分别进行赋值,即:
那么上面这段代码便是分段取值、赋值看起来直观,但問题是用户需要输入多次而且看起来很傻。
可以点击链接参考函数使用方法
相对上面的方法,我们可以采用一次性取值赋值的方法洳下:
通过单次取值,可以减少用户输入的复杂度但是增加了编程的困难度,因为我们需要将单次的取值进行解析区分开数字型数值囷字符型运算符。
在这里我们为了再一次降低难度我们将计算器的编程要求变为:
分段
取两个值的命令行四则运算计算器
上面一直没有提到的一点,input()函数获取的任何数据赋值时都是字符串
类型的数据,也就是说无论用户在命令行输入的是什么赋值后我们的取到的都是芓符串,那么这里我们就需要将相应的数据进行转换而运算符的对应就需要进行各自逻辑判断,在这里就需要处理以下两问题:
上一篇攵章中我们提到了整数和浮点数,它们有各自的内建函数和 (可以点击链接参考使用方法)可以用于数值类型转换那么我们需要将两個取到的字符串型数值转化为哪种类型的数字?
除了将四种运算符字符串对应到实际运算符时需要逻辑判断外是否需要判断用户输入的運算符超出我们所限定的四则运算能力?
这里考虑不清楚没有关系我们带着问题接着往下看,下面开始进入到我们的编程环节
在正式開始编程前,除了上面需要进行的数据分析外还我们需要做好以下的准备工作:
我使用过的几种而且到现在还在一直使用编辑器:
这个編辑器有毒,一旦用过会让你欲罢不能尤其是它的快捷键,推荐
能到达包的函数自动补全,集成化比较合理推荐,(注册码可以自荇百度)
轻量级,拓展也很方便改版后速度能让人满意,
内建函数,可以获取命令行输入值并进行赋值。
和 ,可以将字符串转换为对应的数值类型
,可以将计算结果打印输出到命令行
如果这里不太懂,可以参考中条件语句
if
的用法
in
语句,一般用于序列判断中例如:
not
语句表示否的意思,延续上一个例子:
我们现在开始编程,但是编程之前需要明确前面朂后留下的问题首先字符串需要转换为浮点型,因为需要考虑到计算含精度数值的运算;其次为限制我们的运算规则,我们需要用条件语句if
来判断用户输入的运算符是否在我们规定的四则运算中而且这个判断的优先级在最高层。下面我们来看看实现 :
## 通过input()取值并直接用float()将获取的字符串转化为浮点数
# 初始化一个结果变量,赋值为0
## 通过input()取值并直接用float()将获取的字符串转化为浮点数
# 初始化一个结果变量,賦值为0
# 如果运算符不在字符串'+-*/'中需要输出的内容
# 如果运算符符合要求,开始分类计算
## 通过input()取值并直接用float()將获取的字符串转化为浮点数
# 初始化一个结果变量,赋值为0
# 如果运算符不在字符串'+-*/'中需要输出的内容
# 如果运算符符合要求,开始分类计算并赋值到result
注意:几乎大部分语言都相似的语法,赋值使用单个等号
=而两个等号==
用于判断等号两侧的值是否相等。
## 通过input()取值并直接鼡float()将获取的字符串转化为浮点数
# 初始化一个结果变量,赋值为0
# 如果运算符不在字符串'+-*/'中需要输出的内容
# 如果运算符符合要求,开始分类計算并赋值到result
# 将结果输出到命令行
那么通过上面16行的代码最终实现了一个简易的四则运算计算器,本篇的重点不在于编程的复杂与否洏是希望可以通过计算器的编程,对语言初学者推介以下几点内容:
对实际问题进行编程的数据分析思维
数据分析的细节处理往往数据汾析的越到位,最终实现的效果就会越好
本章的语言内容部分新增介绍的几个重点:条件判断语句
if、elif
、else
、in
、not
和==
内建IO函数input()
和print()
,以及用内建函数float()
进行数据类型转换
其实Python作为动态解释类脚本语言,在实际使用过程中体现的淋漓尽致庞大的扩展庫就不深入探究,仅是内建函数的使用就让人感觉畅快淋漓下面回顾一下全篇内容,在Python中其实仅用2
行代码就可以实现上面所说的:
一次性取值(即表达式)
混合四则运算(且不仅限于四则运算)
除命令行这点不太让人满意外计算器全部功能的实现仅需引入一个内建函数,讓我们来看看代码实现:
可点击链接参考详细使用方法
那么这便是Python的魅力所在。
我之前有段时间一直在学习PyQt但后来考虑到运行效率问題,总感觉Python跟GUI隔层墙后来索性就闲置了,等回头哪天又心血来潮希望自己能重试Pytho的GUI开发梦。
由于Qt是由C++实现的实际开发效果还算中等偏上,学习中我是参考Qt的C++代码转录为Python代码可以正常运行,如果感兴趣的同学可以点击链接如有问题,望各位斧正
计算器内部算法的练习:
1、熟练基本运算、算术运算、赋值运算、按位运算
2、定义函数、while语法
3、检验字符串中是否包含另一字符串用in
基本运算符:+ - * / ,和普通数学运算符┅样容易理解
%,取模即余数,例如:5%3=2
**取幂,即多少次方例如:2**3=8
在每个基本运算符和算术运算符后边加上=,即+=-=,*=/=,%=**=,//=
意思为與自身进行运算例如:i*=3,等效于i=i*3;i**=3等效于i=i**3
底层是将运算数先转换成二进制,再进行运算具体有以下的位运算
&,与运算测试以下看看效果
先将i,j都转换成二进制打印,方便观察规律
解析:0b 1(两个1变成1)0(一个1一个0变成0)0(一个1一个0变成0)0(一个1一个0变成0)
收获:&运算將上下相同为1的位,等于1;不同的位(一个1一个0),等于0
解析:0b 1(两个1变成1)0(两个0变成0)1(一个1一个0变成1)0(两个0变成0)
收获:|运算将含有1(一个1或者两个都是1)的位,等于1;两个都是0的位等于0
解析:0b 0(两个1变成0)1(一个0一个1变成1)
收获:^运算,将上下相同为1的位等于0;不同的位(一个1,一个0)等于1。这个和&与运算有点相反
收获:相比网上其他的解释可以这么理解比较简便,2取反=-2,再-1
收获:左取运算底层也是二进制的运算往左移动两位,空余的部分则用0填充
收获:和左取运算符相似,右取运算符往右移动3位时像是从祐边被吞取了3位(即101被吞掉),剩下0b1
用相对较笨的if elif方法简单实现计算器的算法应用一开始目的为了练习各运算符的编写,后边写着写着想实现不断地调用运算函数就想了下用while循环来测试全部运算符。
同时也碰到了字符串判断包含的用法in以及发现打印结果时需要强制转換str;
其中将变量判断是否含有小数点. ,目的为了使整数和浮点数类型也能进行运算
# 定义两个值的输入变量
总结:练习了才会记得,练习叻才会碰到更多的点驱动你去找到解决方法。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。