Python 极简教程(十二)逻辑控制语句 if else
计算机软件之所以能够对不同的情况进行不同的处理,就是我们在编码的时候,通过逻辑控制语句,告诉软件在不同的情况下应该做什么处理。
比如我们在登录的时候,那么当你输入正确的账号密码和错误的账号密码,完全是两种处理方式。
这就是我们常说的逻辑分支,中间的菱形表示逻辑条件判断,当满足不同的条件的情况下,程序会走不同的分支。
那么在计算机语言中,怎么决定条件的走向呢?那么主要用到我们常用的来逻辑相关的运算符,包括比较运算符、逻辑运算符和成员运算符。详情请见 运算符 小节。
也就是所有运算结果为 True 或 Flase 这类布尔值的 表达式
、函数
、方法
等,都可以作为逻辑判断中的条件。
单条件的逻辑判断语句
在 Python 中,一条完整的逻辑判断语句,除了表达式之外,还需要用到几个关键字if...else...
。这几个关键字都很好理解如果..否则...
。如果条件成立,执行什么语句,否则执行另外的什么语句
。用伪代码表示如下:
if 条件:
如果条件成立(结果为True),执行这里的语句块
else:
如果条件不成立(结果为False),执行这里的语句块
注意缩进
到目前为止,我们写的语句都是逐行执行。但是从现在开始,就涉及到缩进的概念了。此时建议大家使用Pycharm
等编码工具,将会更容易处理缩进。
Python 中,用同一缩进来表示同一层级的语句体。如果缩进不同,则表示内部语句的意思。
在 if...else... 语句中,if 下面的缩进表示这些语句从属于 if 语句,属于包含在 if 语句中的子语句。在其他语言中,一般用大括号表示。
Python 中使用缩进来标识语句块,虽然很优雅,初学者却容易混淆。不过并不用太过担心,多写写自然就熟悉了。
我们用代码模拟实现上面图中的登录过程:
user = input('请输入密码:')
pwd = input('请输入密码:')
if user == 'admin' and pwd == '123':
print('登录成功')
else:
print('登录失败')
运行上面的程序,当你输入的账号为admin
并且密码为123
的时候,会打印登录成功
,否则打印登录失败
。
我们看到,上面的语句执行后,要么打印登录成功
,要么打印登录失败
。也就是说 if...else...
中 if 和 else 所包含的语句,只会执行一次,要么执行 if 中的,要么执行 else 中的,不会两块都执行。
多条件的逻辑判断语句
上面 if...else...
只能执行一个条件的情况,但是在很多时候,我们可能会有很多的条件。那么对于多条件的判断情况,我们需要怎么处理呢?Python 中提供了elif
的关键字。
# 看一个例子:
# 输入一个成绩
# 当成绩大于80打印优秀
# 60-80之间打印及格
# 60以下打印不及格
score = int(input('请输入一个成绩:'))
if score >= 80:
print('优秀')
elif score >= 60:
print('及格')
else:
print('不及格')
# 最后的 else 也可以替换为 elif score < 60
在这里,我们看到多个条件的情况,但是要注意,虽然我们写了这么多的语句,但是在整个 if...elif...else...
语句体中,只会有一块语句被执行。
if...elif...else...
,这就是 if 的完全体了,这一整套的语句块,可以叫做 Python 中的 if 语句。在 Python 的 if 语句中,if 关键字只能出现一次,出现多次表示是多个 if 语句了;elif 可以没有也可以有无数多个(0 到 n);else 用来表示当所有条件不成立的情况,可以没有,有的话只能有一个(0 或 1)
if 条件1:
如果条件1成立,执行这里的语句
elif 条件2: # 如果条件1不成立,那么进行条件2的判断
如果条件2成立,执行这里的语句
else:
如果上面的条件全部都不成立,执行这里的语句
单变量的条件
在 if 语句
中除了用逻辑表达式来表示条件外,还有一种情况可以用来表示条件。那就是变量是否存在有效的值,如果有有效的值,则表示 True,否则表示 False。看下面的例子:
>>> a = 0
>>> if a:
print('a 具备有效值') # 不用打印任何内容,因为 if a, 此时条件不成立
>>> b = 15
>>> if b:
print('b 具备有效值')
b 具备有效值 # b 不等于 0,if b,此时条件成立
除此外,当变量单独作为条件时,为 False 的情况如下,其他情况都为 True
类型 | 为 False 的情况 |
---|---|
int | 当变量值为 0 |
str | 当变量值为 '' 空字符串时,注意这里是空字符串,不是带空格的字符串 |
list | 当变量值为 [] 空列表 |
tuple | 当变量值为 () 空元组 |
dict | 当变量值为 {} 空字典 |
set | 当变量值为 set() 空集合 |
None | 当变量值为 None |
除了表中所列的情况,当变量值为其他值时,则表示条件成立。
逻辑判断语句的概念比较简单,但是用的时候,要注意条件如何确定,不同条件下执行什么语句。可以先用中文的形式写出伪代码,再转换为代码。
比如这样一个练习:
输入一个整数,如果此数为0,则输出”石头”,如果此数为1,则输出“剪刀”,如果此数为2,则输出“布”,如果为其它,则输出“错误”。
可以先用伪代码写出思路:
输入一个变量 num
把 num 转换为 int
如果 num 为 0:
输出石头
如果 num 为 1:
输出剪刀
如果 num 为 2:
输出布
以上条件都不成立时:
输出错误
通过伪代码,理出思路,然后再转换为代码就容易多了。不要一上来就立马写代码,先理思路最重要。否则,遇到逻辑复杂的时候,会越绕越晕。切记切记!!!
本节练习:(题目来源部分网络收集)
- 输入一个int型的数据,判断这个数是否能被2整除,如果能被2整除,那么输出“这个数是偶数”,否则输出“这个数是奇数”。
- 输入一个年份,判是闰年还是平年(能整除4、400,不能整除100)。举例:1000不是闰年,2000是一个闰年,1996年是闰年,1998不是。
- 现在有一个银行保险柜,有两道密码。 想拿到里面的钱必须两次输入的密码都要正确。 如果第一道密码都不正确,那直接把你拦在外面; 如果第一道密码输入正确,才能有权输入第二道密码。 只有当第二道密码也输入正确,才能拿到钱!
- 输入两个整数,放入到a与b变量中去,如果a>=b就将a与b中的值进行交换,否则就不交换。目的就是要让a中放的值总是小于或等于b中的数,输出。
- 输入三个int型的数据,放入到a,b,c三个变量中去,使用条件结构与交换逻辑将这三个变量中的值从小到大排列。
- 输入一个三位整数,判断其是不是降序数如: 531是降序数 百位>十位>个位。
下面是一个小游戏设计,你可以继续写下去:
# 游戏角色属性
roles = ['游侠', '剑客']
role = ''
money = 100 # 初始金钱
prestige = 0 # 江湖威望
hp = 100 # 初始血量
atk = 10 # 初始攻击
i = input('请选择你的角色:\n1. 游侠\n2. 剑客\n')
if i == '1':
print('你成为了一名游侠!')
role = roles[0]
elif i == '2':
print('你成为了一名剑客!')
role = roles[1]
else:
print('没有你要选择的职业!默认为你选择了游侠!')
role = roles[0]
i = input('现在你进入了江湖,请选择你的下一步行动:\n1.出门左拐\n2.出门右拐')
if i == '1':
j = input('前面出现了一幕不好的场景,疑似地主家的傻儿子带着一帮狗腿子在调戏良家妇女,你打算?\n1.英雄救美\n2.装作没看见')
if j == '1':
print('你上前打跑了地主傻儿子和狗腿子,但是由于对方人多,你也受了伤!')
prestige += 1 # 江湖威望 +1
hp -= 5 # 血量 -5
elif j == '2':
print('你选择装作什么都没看见。由于你的懦弱,严重打击了你江湖行走的信心!')
prestige -= 2
elif i == '2':
...
本节练习答案
请先做完练习,并理解后再看下一篇!
Python 极简教程(十二)逻辑控制语句 if else的更多相关文章
- Python 极简教程(二)编码工具
Python 的编码工具很多.目前最流行的是 pycharm,关于 pycharm 的安装使用请参考 PyCharm安装使用教程. 而学习过程中,我觉得最好用的,还是 Python 自带的练习工具 I ...
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- python极简教程04:进程和线程
测试奇谭,BUG不见. 大家好,我是谭叔. 这一场,主讲python的进程和线程. 目的:掌握初学必须的进程和线程知识. 进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个 ...
- python极简教程01:基础变量
测试奇谭,BUG不见. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的教程,他们同大多数自学编程语言的人一样,无外乎遇到以下这些问题: 网络上的资料过多且良莠不全,不知道如 ...
- Python 极简教程(十)集合 set
什么是集合? 集合(set)是一种可变,无序和不重复的序列. 集合是python的序列之一,集合没有列表(list).元组(tuple)和字典(ditc)常见.但是有时候也有奇效. 我们先来看个集合的 ...
- Python 极简教程(一)前言
现在 Python 用处很多,学的人也很多,其流行程度自不必说.但是很多人学 Python 的时候都遇到过问题,特别对于非计算机专业毕业的人来说. 现在的教程非常多,但是绝大部分对于初学者都不够友好. ...
- Python 极简教程(七)列表 list
由于列表过于重要,请认真看完并保证所有代码都敲过一遍. 什么是列表 列表是 Python 中最常用的数据结构,也是一种数据类型,其样式如下: li = [1, 2, 3, 'a', 'b'] 列表是一 ...
- Python 极简教程(三)数据类型
每种语言都有各种数据类型.这就像在现实生活中,我们计数的时候需要用到数字,在表述金额.重量.距离等需要精确计数时用到小数,在日常交谈中要用文字,等等.在计算机语言中,为了表述不同的情况,也需要用到各种 ...
- python极简教程05:生成器和匿名函数
测试奇谭,BUG不见. 讲解之前,我先说说我的教程和网上其他教程的区别: 1 我分享的是我在工作中高频使用的场景,是精华内容: 2 我分享的是学习方法,亦或说,是指明你该学哪些.该重点掌握哪些内容: ...
随机推荐
- 用efibootmgr管理UEFI启动项,添加丢失的启动项
UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:“统一的可扩展固件接口”(Unified Extensible Firmware Interface), ...
- HDU 4431 Mahjong 模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4431 不能说是水题了,具体实现还是很恶心的...几乎优化到哭但是DFS(还加了几个剪枝)还是不行...搜索一直T ...
- python数据处理技巧一
字符串赋值(传参)技巧 Python中一般的字符串赋值的方式如下: variable = "Test" print "I just [%s] unit"%var ...
- 使用 HTML5 canvas制作拾色器
自制的拾色器漂亮吧,哈哈 废话不多说直接上代码,希望可以帮到需要的朋友 <html><head> <style> .canvas_color{p ...
- Java并发包之CountDownLatch用法
CountDownLatch计数器闭锁是一个能阻塞主线程,让其他线程满足特定条件下主线程再继续执行的线程同步工具. Latch闭锁的意思,是一种同步的工具类.类似于一扇门:在闭锁到达结束状态之前,这扇 ...
- LightOJ 1070 Algebraic Problem (推导+矩阵高速幂)
题目链接:problem=1070">LightOJ 1070 Algebraic Problem 题意:已知a+b和ab的值求a^n+b^n.结果模2^64. 思路: 1.找递推式 ...
- 马上运行函数-$(function(){})篇
QQ:1187362408 欢迎技术交流和学习 马上运行函数-$(function(){})篇(jquery): TODO: 1.jquery:jQuery(function($){ }) 与 $(d ...
- window cmd 命令大全 (order)
Windows CMD命令大全 命令简介 cmd是command的缩写.即命令行 . 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统 ...
- LBP 特征
LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.用于纹理特征提取.而且,提取的特征是图像的局部的纹理特征 ...
- Kinect 开发 —— 骨骼追踪(下)
Kinect 连线游戏 在纸上将一些列数字(用一个圆点表示)从小到大用线连起来.游戏逻辑很简单,只不过我们在这里要实现的是动动手将这些点连起来,而不是用笔或者鼠标. 在开始写代码之前,需要明确定义我们 ...