1. 概述
我们已经了解了Python的一些基础知识,今天我们要看一下Python的条件判断语句,由于从现在开始内容要求逻辑运算,在介绍的时候为了照顾没有计算机科学基础的同学,我会涵盖一些非常基础的逻辑算法知识,已经会的同学可以跳过这些内容。计算机编程的原理简要介绍
集成开发环境PyCharm
变量名、数字、字符串、列表
句式、注释
输入和输出
条件判断语句
循环语句
函数
模块和引入
各类数据结构
2. 流程图
首先,当我们做事情的时候,怎么进行判断呢?一个最直观的表现手法是画流程图,其实在熟悉算法后,我们一般会跳过这个步骤,但在进行项目规划时,如果能先把流程图画好,可以事半功倍。当然本教程主要目的是教大家怎么编写Python,并不会对流程图的各个进行细节阐述,我会通过实例来给大家展示一下流程图的思维方式。
画流程图我们可以使用PowerPoint,就是做幻灯片的那个,当然,还有一款国外的强大在线应用draw.io,我们可以选择保存到各个网盘或者直接本地电脑中,点击创建空白图表就行。土豪可以用微软的那个Visio,听说很贵。
看一道题:
期末算分时,我们需要输入一个学生的各科分数,通过比重判断这个学生最后等第。科目有五门,语文占30%,数学30%,英语20%,计算机10%,经济10%。全部100分制,总分到达90分为A,到达80分为B,到达70分为C,到达60分为D,59分及以下为F。
至于为什么选计算机和经济作为选修,因为笔者就是这俩专业的。
那么流程图怎么画?我们可以通过draw.io的各个组件实现,不过首先我们脑海里需要形成一个概念,即首先程序要拿到数据,即要求老师输入各科分数;
接着计算该学生总成绩;
接着判断学生的等第:如果学生分数为90及以上,等第为A;
如果没有90,但是达到了80,则为B;
如果没有80,但是达到了70,则为C;
如果没有70,但是达到了60,则为D;
如果以上条件都没达到,则拿了60分以下,给F;
最后在屏幕上输出等第,告知老师。
最后流程图长这样:
3. if-elif-else语句
条件判断语句,最常见的就是if-elif-else语句了,if和else很好理解,即如果和否则,感觉就跟我们常说的“非黑即白”同一个逻辑,
#让用户输入一个整数来判断奇偶
number = int(input("Please enter an integer: "))
#如果整数除以2余数是1,则为奇数,否则为偶数
if number % 2 == 1:
print("It is an odd number.")
else:
print("It is an even number.")
也就是说,像这种满足了一个条件,进行如下操作,不满足的话那就怎么样怎么样的,我们可以直接if-else。
有时候我们可能不满足某一条件时,我们就什么也不做,那一个if就够了,else不是必须要的。比如:
#让用户输入一个整数来判断奇偶
number = int(input("Please enter an integer: "))
#如果整数除以2余数是1,则告诉用户它是奇数,不然什么都不说,无可奉告
if number % 2 == 1: #两个等号==来判断左右的值是否相同
print("It is an odd number.")
虽然这个程序看着很调皮,我们输入一个数,如果是奇数,程序会显示,这是个奇数,如果输入的偶数,那程序就默默地结束了,什么也不会显示。
那么有时候我们会遇到这样的情况,如果我们满足了条件一,我们执行以下操作,那么不满足条件一却满足了条件二,我们执行以下操作,如果不满足二满足三又怎么样怎么样,什么都不满足又怎么样怎么样,比如流程图那道题,我复制粘贴下来:期末算分时,我们需要输入一个学生的各科分数,通过比重判断这个学生最后等第。科目有五门,语文占30%,数学30%,英语20%,计算机10%,经济10%。全部100分制,总分到达90分为A,到达80分为B,到达70分为C,到达60分为D,59分及以下为F。
我们则需要使用elif,意思就是“否则如果”(else if不知道怎么翻译了),具体看一下怎么写代码:
#首先,要求老师输入各科成绩
literature = int(input("Please enter your literature score: "))
math = int(input("Please enter your math score: "))
english = int(input("Please enter your english score: "))
computer = int(input("Please enter your computer score: "))
economics = int(input("Please enter your economics score: "))
#其次,计算总分,0.1、0.2之类的可以直接写成.1、.2
total = literature * .3 + math * .3 + \
english * .2 + computer * .1 + economics * .1
#根据总分判断等第
if total >= 90:
grade = "A"
elif total >= 80:
grade = "B"
elif total >= 70:
grade = "C"
elif total >= 60:
grade = "D"
else:
grade = "F"
#显示等第
print("The student's grade is {}".format(grade))
我们看一下if-elif-else这块:
if total >= 90: #很好理解,如果总分大于等于90,得A
grade = "A"
elif total >= 80: #如果上面不满足,总分小于90,那么判断是不是80+,是的话得B
grade = "B"
elif total >= 70: #如果上面不满足,总分小于80,那么判断是不是70+,是的话得C
grade = "C"
elif total >= 60: #如果上面不满足,总分小于70,那么判断是不是60+,是的话得D
grade = "D"
else: #如果上面都不满足,总分都小于60了,给F
grade = "F"
我们可以看到这个判断顺序是从上到下的,不满足某条件,就会向下看是否满足接下来的一个条件,按顺序进行,这里要注意,一旦满足某一条件,就会自动忽略接下来的判断。
如果我们把上面的代码倒着写,把if-elif-else改成如下:
if total >= 0:
grade = "F"
elif total >= 60:
grade = "D"
elif total >= 70:
grade = "C"
elif total >= 80:
grade = "B"
else:
grade = "A"
这就出问题了,如果得了0分或0分以上,给F,但是,一般的课程都是0粉或0分以上,输入的分数肯定满足该条件,grade这个变量就直接被赋了F这个值,满足了条件一,就没了所谓的否则和否则如果,自动忽略接下来的条件二三四五。做出这个程序的人估计要被学霸学神们吊着打,考试拿满分,等第亮红灯。为了保护程序猿,又不伤害程序猿的自尊(等第还是倒着写,但是等第要给对),我们该怎么修改呢?
if total < 60:
grade = "F"
elif total < 70:
grade = "D"
elif total < 80:
grade = "C"
elif total < 90:
grade = "B"
else:
grade = "A"
这样就好多了,如果没拿到60分,给F;如果拿到了,但是没到70,给D;如果到70没到80,给C,以此类推。
有同学就会问了,为什么不给一个区间,看着就不会出错。这样做可以,但是没有必要,上面那段代码等同于:
if total < 60:
grade = "F"
elif 60 <= total < 70:
grade = "D"
elif 70 <= total < 80:
grade = "C"
elif 80 <= total < 90:
grade = "B"
else:
grade = "A"
但是这段代码明显就比较冗杂且没有必要,如果不满足条件1,那么自然total已经大于等于60了,无非再重申一遍。记住Python是一门优雅简洁的语言,我们编程必须要做到简洁干练。
4. 篇幅缩减
我们在本文看到了各种对比大小的符号,比如两个等号==,大于小于,我想把它们放到下面的一篇文章介绍。我也意识到之前的文章都有点太长了,考虑到大家读着读着会失去耐心,再者我自己也不想一下子写太多(懒了),我打算把原来一篇文章的量进行拆解,方便你我他,同时贯彻长辈们的谆谆教诲:
谢谢观赏!