Python全栈开发-Python基础教程-02条件语句和while循环

本文详细介绍了Python中的条件语句if及循环语句while的使用方法,包括基本语法、逻辑运算符、三目运算符等内容,并通过实例讲解了break和continue的作用。

条件语句和while循环

一. if语句

Python 编程中 if 语句用于控制程序的执行,可以通过下图来简单了解条件语句的执行过程:

基本形式为:

if 判断条件:
    执行语句
else:
    执行语句

Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。
其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句。
Python关系运算符

运算符描述
==等于 - 比较对象是否相等
!=不等于 - 比较两个对象是否不相等
>大于 - 返回x是否大于y
<小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价
>=大于等于 - 返回x是否大于等于y
<=小于等于 - 返回x是否小于等于y

Python中使用缩进代替c语言中的大括号,来告诉程序所执行的内容。
缩进——推荐四个空格 (使用2个、3个空格或者tab都是可以得)

下面举个例子来测试一下:
如果周末不下雨,就去逛街,否则就在家学习

tianqi = 'xiayu'
if tianqi != 'xiayu':
	print('逛街')
else:
	print('在家学习')

运行结果为:

在家学习

下面我们可以对上面的代码进行一些小优化:
原则:
1、逻辑更加简单,比如少用否定,多用肯定;
2、用英文代替拼音,减少歧义

weather = 'overcast' # 阴天
if weather == 'rain':
	print('在家学习')
if weather == 'overcast':
	print('去钓鱼')
if weather == 'sunny':
	print('逛街')

运行结果为:

去钓鱼

但是当多个if叠在一起时又会出现很多歧义,因为前面的if判断完之后,依旧会往下运行,从而导致代码运行效率很低,这里,我们就引入了elif来优化代码:
下面我们来比较一下ifelif的区别:

a = 5
if a < 6:      #条件1
    print(1)
if a < 7:      #条件2
    print(2)
else:
    print(3)

运行结果:

1
2

不难看出,在判断完条件一之后,代码依旧会往下运行至条件二继续判断,
而用elif语句是这样的:

a = 5
if a < 6:      #条件1
    print(1)
elif a < 7:    #条件2
    print(2)
else:
    print(3)

运行结果:

1

很明显,引入elif之后,在判断完第一个if之后,直接结束本次判断流程,不会往下继续判断。
小结:
1、if使用:if后面跟上判断表达式,注意加上某号和缩进
2、else使用:else不能单独使用,后面直接跟上某号,没有判断式
3、elif使用:elif只能跟在if后面,不能单独出现
4、判断使用:判断语句是基本的语句,是必须要掌握的内容
if结构与elif结构应用场景:
1.如果你只想执行一个代码块,那么用if-elif-else结构吧;
2.如果你要运行多个代码块,那么就用多个if吧。(多条件同时满足)

二.三目运算

python中没有其他语言中的三元表达式,不过有类似的实现方法
我们从一个具体的例子切入。假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if else 语句,例如:

a = 1
b = 2
if a>b:
    max = a;
else:
    max = b;
print(max)

运行结果:

2

但是 Python 提供了一种更加简洁的写法,如下所示:

a = 1
b = 2
max = a if a>b else b
print(max)

运行结果:

2

使用 if else 实现三目运算符(条件运算符)的格式如下:

exp1 if contion else exp2

condition 是判断条件,exp1exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。

前面的语句max = a if a>b else b的含义是:
如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max
如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max

下面在看一个例子:

weather = "rain"
print("在家学习") if weather == "rain" else print("出去玩")
print("在家学习" if weather == "rain" else "出去玩")

运行结果为:

在家学习
在家学习

三. 逻辑运算

逻辑运算符

运算符逻辑表达式描述
andx and y布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
orx or y布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。
notnot x布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

1. 与逻辑 and

and:表示”并且“或者”和“的意思,只有当and两边都是为真的时候,才会返回真,其他语言中常用**&来表示and**

左边右边结果
111
100
010
000

举例:

num = 18
if num > 10 and num < 20:
    print("真年轻")
else:
    print("瞎说")

运行结果:

真年轻

2. 或逻辑 or
or:表示”或者“的意思,只有两边存在真,就会返回真,都会假才会返回假,在其他语言中常用 | 来表示or

左边右边结果
111
101
011
000

举例:

num = 5
if num > 8 or num < 2:
    print("ok")
else:
    print("no")

运行结果为:

no

3. 逻辑非 not
not:表示”取反“的意思,也就是真的会变成假的,假的会变成真的,在其他语言中常用!来表示not

左边结果
10
01

举例:

a = False
if not a:
	print('ok')
else:
	print('no')

运行结果:

ok

4.逻辑运算优先级

not > and > or

举例:

print(1==2 or 2==3 or 3==3 and 1==1 and not 2==1)

运行结果:

True

5. 逻辑短路

下面我们来看下面的的代码:

print(b == 1)

运行结果为:

Traceback (most recent call last):
  File "C:\Users\admin\Desktop\new.py", line 1, in <module>
    print(b == 1)
NameError: name 'b' is not defined

由于b未定义,所以b == 1是不成立的,直接报错
但是看下面的代码:

print(1 == 2 and b == 1)

运行结果为:

False

为什么第二次b一样为定义,却可以正常运行呢?这就涉及到了python的逻辑短路
由于与运算and的运算规则为一假则假,所以and前面1 == 2已经为假,后面的无论真假结果都为假,所以造成了and后面代码被短路,直接忽略跳过,有利于提高代码运行效率。

逻辑短路·规则如下

  • 表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。若 or 的左侧逻辑值为 False ,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
  • 表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。若 and 的左侧逻辑值为 True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
  • or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

总结
1、and是并且的意思,也就是说左右两边需要同时满足
2、or是或者的意思,左右两边只要满足一个即可
3、逻辑短路,理解逻辑短路的原理
4、not是取反的意思,也就是真的会变成假,假的会变成真

四. while循环

Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:

while 判断条件(condition):      
    执行语句(statements)……	    

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假 false 时,循环结束。

执行流程图如下:
在这里插入图片描述
举例:

i = 1									#循环初始值
while i < 10:							#循环终止条件
    print(f'我在跑步,当前是第{i}圈')		#代码块
    i += 1                              #等同于 i = i + 1

运行结果:

我在跑步,当前是第1圈
我在跑步,当前是第2圈
我在跑步,当前是第3圈
我在跑步,当前是第4圈
我在跑步,当前是第5圈
我在跑步,当前是第6圈
我在跑步,当前是第7圈
我在跑步,当前是第8圈
我在跑步,当前是第9#当i=10时,不满足i<10,所以结束循环

无限循环:也叫死循环,代码会无限循环执行下去
例如:

i = 1
while (i > 0):              #这里每次循环i均大于0,因此构成死循环
    print(f"这是第{i}次循环")
    i += 1

运行结果:

这是第1次循环
这是第2次循环
这是第3次循环
这是第4次循环
这是第5次循环
这是第6次循环
这是第7次循环
这是第8次循环
这是第9次循环
这是第10次循环
这是第11次循环
这是第12次循环
这是第13次循环
这是第14次循环
这是第15次循环
......

break语句
如果想提前终止代码该怎么办呢?
Python break语句,就像在C语言中,打破了最小封闭for或while循环。

break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。

break语句用在whilefor循环中。

如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。
例如:

i = 1
while i < 10:
    if i == 5:
        break   #提前退出循环,无视后面代码
    print(f'我在跑步,当前是第{i}圈')
    i += 1

运行结果:

我在跑步,当前是第1圈
我在跑步,当前是第2圈
我在跑步,当前是第3圈
我在跑步,当前是第4

continue语句
如果想忽略中间某一次循环该怎么办呢?
Python continue 语句跳出本次循环,而break跳出整个循环。

continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。

continue语句用在whilefor循环中。

i = 1
while i < 10:
    if i == 5:
        continue  #跳过本次循环,直接回到循环条件进行下一次
    print(f'我在跑步,当前是第{i}圈')
    i += 1

运行结果:

我在跑步,当前是第1圈
我在跑步,当前是第2圈
我在跑步,当前是第3圈
我在跑步,当前是第4

但是为什么第五次和之后的都不显示了呢,是因为在continue跳出本次之后,i依然为5,继续判断,依然回到continue,如此往复,后面的就都没有了,因此我们做如下改进:

i = 0
while i < 10:
    i += 1
    if i == 5:
        continue
    print(f'我在跑步,当前是第{i}圈')

运行结果:

我在跑步,当前是第1圈
我在跑步,当前是第2圈
我在跑步,当前是第3圈
我在跑步,当前是第4圈
我在跑步,当前是第6圈
我在跑步,当前是第7圈
我在跑步,当前是第8圈
我在跑步,当前是第9圈
我在跑步,当前是第10

此时,i = i + 1这条语句放在了if前面,当i = 5跳出本次循环到下一次循环后,i加一之后变成了6继续可以执行,不过这样,初始值i 需要改成0以保证不出现0圈

本节课总结

一、if判断
掌握:if判断的使用
掌握:多个条件下的选择判断
二、三目运算
掌握:三目运算的基本使用
三、逻辑判断
掌握:and、or和not三种逻辑运算符
四、while
掌握:while的循环使用方法
掌握:break和continue的使用方法

上次作业:

参考代码如下
1、一个时间格式的整数:20201012,利用计算取出它的年月日

a = 20201209
year = a // 10000
moth = a // 100 % 100
day = a % 100
print('{}年{}月{}日'.format(year,moth,day))

运行结果:

2020129

2、将多个单词利用字符串拼接,输出成一句话 ‘hello world’‘ my name is ’‘xxx’ 3种

a = 'hello world'
b = 'my name is'
c = 'luokk'
print(a + ' ' + b + ' '+ c)
print(f'{a} {b} {c}')
print('%s %s %s' % (a,b,c))
print('{} {} {}'.format(a,b,c))

运行结果:

hello world my name is luokk
hello world my name is luokk
hello world my name is luokk
hello world my name is luokk

3、计算出一个圆的周长,面积,让用户输入半径

import math
r = float(input('请输入圆的半径:'))
area = math.pi * r ** 2
girth = 2 * math.pi * r
print('圆的面积为:{:.2f}'.format(area))
print('圆的周长为:{:.2f}'.format(girth))

运行结果:

请输入圆的半径:5
圆的面积为:78.54
圆的周长为:31.42

本节作业:

1、利用while写出九九乘法表
2、利用random的randint方法写一个猜数字的小游戏
答案下一个博客公布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值