Python教程 - 3语句

更好的阅读体验:点这里www.doubibiji.com

3 语句

3.1 判断语句

判断在生活中无处不在,例如我们登录某个系统,需要判断密码是否正确,正确才能登录,否则登录失败。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在代码中如何实现上面的逻辑呢?

1 if-else 语句

在 Python 中通过 if else 来进行条件的判断,格式如下:

if 条件:
    条件成立,要做的事情
else:
    条件不成立,要做的事情

也可以不需要 else:

if 条件:
    条件成立,要做的事情

if 后面的条件需要 bool 类型的结果,也就是 True 或 False ,例如:

correct = True
if b:
    print("密码正确")			
    print("登录成功")
else:
    print("密码错误")
    print("登录失败")
    
print("我在 if-else 之外")

执行结果:

密码正确

登录成功

我在 if-else 之外

Python和其他语言不同,是通过缩进判断代码块的归属关系。

if 下面的语句需要缩进4个空格,表示在 if 的条件内,同样 else 也是。而最后的 print("我在 if-else 之外") 在 if 和 else 之外。

注意,if 和 else 之后的冒号 : 不要漏掉。

一般情况下,我们通过 关系运算逻辑运算 得到 bool 结果。

2 关系运算符

关系运算符也就是比较运算符,主要有以下几种:

运算符><>=<===!=
含义大于小于大于等于小于等于等于不等于

我们可以在 if 语句中使用关系运算,例如:

age = 18
if age >= 18:
    print("我成年了")
    print("我与罪恶不共戴天")

print("这个不属于if范围")

归属于 if 的代码块,需在前方填充4个空格缩进,所以前两个打印语句只会在 if 条件成立后输出。

3 逻辑运算符

逻辑运算是用来同时判断多个条件。

主要有以下三种:

运算符andornot
含义与,两边条件同时满足或,两边条件满足一个即可非,不满足

and 举栗:

num = 10
if num > 5 and num < 15:
    print("num在5~15之间")				# 打印:num在5~15之间

or 举栗:

num = 10
if num < 5 or num > 15:
    print("num不在5~15之间")			
else:
    print("num在5~15之间")				# 打印:num在5~15之间

not 举栗:

num = 10
if not num < 5:
    print("num大于5")						# 打印:num大于5
逻辑运算符的优先级

优先级:not > and > or

举个栗子:

result = not 1 < 2 and 3 == 3 or 1 == 3 and 2 <= 3
print(result)				# 打印:False

可以将逻辑运算的结果赋值给一个变量的。当一个逻辑运算语句中同时包含and、or 或 not 的时候,会按照优先级进行运算。

所以上面先运算 not 1 < 2,然后运算 not 1 < 2 and 3 == 3,然后运算 1 == 3 and 2 <= 3,最后运算 or。

逻辑短路

逻辑短路就是在进行逻辑运算的时候,如果已经能够得到最后的值,就不会再继续进行判断了。

只有 and 和 or 运算符存在逻辑短路。

举个栗子:

num = 10
if num > 20 and num < 40
    print("num在20~40之间")				# 不会执行

在进行 if 判断的时候,num > 20 已经不成立了,而 and 运算需要两边都满足,所以后面的条件成不成立都不会影响最终逻辑表达式的结果,所以 and 后面就不会再继续判断了,这就是逻辑短路。

同样 or 运算符:

num = 10
if num < 20 or num > 40
    print("num在20~100之间")				# 打印:num在20~100之间

在进行 if 判断的时候,num < 20 已经成立了,or 运算只要一边满足即可,所以整个逻辑表达式肯定是成立的,所以 or 后面就不会继续判断了。

4 三目运算符

假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if else 语句,例如:

if a > b:
    max = a;
else:
    max = b;

在 C 或 Java 中我们可以使用三目运算符这样写:

max = a > b ? a : b;

上面的意思是:先判断 a > b,如果成立,就返回a,不成立就返回b。

Python 没有引入 ? : 这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。

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

exp1 if contion else exp2

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

所以上面获取两个数字中的较大一个,用Python的写法如下:

max = a if a > b else b

5 if elif else 语句

if-else 只能进行是和否的判断。

if-elif-else 可以进行多条件判断。

语法格式:

if 条件1:
    满足条件1做的事
elif 条件2:
    满足条件2做的事
elif 条件3:
    满足条件3做的事
else:
    所有条件都不满足做的事

elif可以有多个,最后的 else 可以省略。

当满足一个条件后,其他的条件就不会再判断了,如果所有条件都不满足,会执行else。

下面通过练习来举个栗子:

通过在键盘输入成绩,经过判断,打印出输入的成绩是优秀、良好、中等、及格还是不及格。

score = input("请输入成绩:")
# 将输入的数据转换整数
score = int(score)

if score < 0 or score > 100:
    print("请输入正确的成绩")
elif score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 70:
    print("中等")
elif score >= 60:
    print("及格")
else:
    print("不及格")

6 判断条件的扩展

在上面 if 或 elif 的条件是 bool 值,但是我们也可以直接使用数字或字符串等进行判断。

举个栗子:

if 1:
    print("1为真")

if 0:
    print("0为真")

if 0.0:
    print("0.0为真")

if -1:
    print("-1为真")

if "":
    print("空字符串为真")

if " ":
    print("空格为真")

if None:
    print("None为真")

打印结果:

1为真
-1为真
空格为真

所以可以看到,0为假,非0的数字都为真;空字符串为假,非空字符串都为真;None为假。

7 判断语句的嵌套

判断的逻辑是可以嵌套的,例如买票的时候,如果是成年,购买全票,如果是未成年,需要判断身高,身高大于120,小于150需要买半票,小于120免票。

那么代码如下:

# 通过键盘输入是否是成年人
isAdult = input("您是否是成年人Y/N:");
if isAdult == 'Y':
    print("成年人,购买全票")
else:
    # 通过键盘输入升高
    height = input("请输入身高:")
    height = int(height)

    if height < 120:
        print("未成年,免票")
    elif 120 <= height <= 150:
        print("未成年,购买半票")
    else:
        print("未成年,身高超限,购买全票")

上面的代码,在 else 中再次进行了判断,当然在 if 和 elif 中也是可以进行嵌套的,还在嵌套中再进行嵌套。

3.2 循环语句

循环在日常生活中也很常见,例如我们要重复做某件事,就需要用到循环,循环不停的做某件事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举个栗子,每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

1 while 循环

可以使用While进行循环操作。

while循环的语法:

while 条件:
    满足条件要做的事情

代码执行到while,会判断是否满足条件,如果满足,就会进入while循环,执行满足条件要做的事情,执行完成,会重新判断while后面的条件,如果满足会继续循环,如果不满足就不在进入循环。

回到一开始的提问:每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

i = 1
while i <= 100:
    print(f"第{i}天,送你一朵玫瑰花")
    i += 1

首先我们定义了一个变量 i ,用来记录当前是第几天。

我们一开始定义了 i 为 1,指定到while循环时,先判断 i 是否小于等于100,如果小于等于100,则进入到循环,打印语句,然后将 i 加1,然后再执行while后面的条件判断,判断 i <= 100,这样一直循环执行,当 i = 101时,刚好已经执行了100次,且不再满足 i < =100,此时终止循环。

注意,一定要对 i 进行累加,如果 i 不进行累加,永远会满足 i <= 100,那么循环将永远不会结束,变成死循环。

执行结果:

第1天,送你一朵玫瑰花

第2天,送你一朵玫瑰花

……

第99天,送你一朵玫瑰花

第100天,送你一朵玫瑰花

我们在计数的时候,i 也可以从0开始,例如:

i = 0
while i < 100:
    print(f"第{i + 1}天,送你一朵玫瑰花")
    i += 1

判断的条件的设定是很灵活的,根据实际需求来就可以了,不是一成不变的。

练习:计算从1累加到100的和

sum = 0;											# 定义一个变量,存储累加的和
i = 1													# 定义一个变量,标识累加到几了,从1开始累加

while i <= 100:								
    sum += i									# 将和累加
    i += 1										# 将i加1,继续累加

print(f"1~100的和为:{sum}")	 # 打印最终的结果

执行结果:

1~100的和为:5050

2 for 循环

除了while循环语句,还可以使用for语句进行循环处理。

但是for循环和while循环有一些区别:

  • while循环的条件是自定义的,自行控制循环条件,并可以进行无限循环。

  • for循环更注重对数据集合的逐个处理,也就是对数据集合的遍历。

for 循环语法
for 临时变量 in 数据集合:
  依次取出数据集合中的内容进行处理

举个栗子:

字符串也是一个一个字符的集合,那么可以使用for循环依次取出字符串中的字符:

content = "Hello"					
for item in content:			# 对字符串content的内容进行遍历
    print(item)

item是一个临时变量,名称是随意的,每一次循环表示取出的数据集合中的一个元素。

打印结果:

H
e
l
l
o

可以看到for循环无法定义循环条件,只能被动取出数组结合的内容。

一般很少遍历字符串,for循环还可以遍历列表、元组、字典等数据集合,在后续的章节再讲解。

range 语句

能否让for循环循环指定的次数呢?

只需要让for循环中的数据集合包含指定个数的元素即可。例如想要循环5次,只需要造一个数据集合为5个元素就可以了,这样遍历该数据集合,for循环就会执行5次。

range函数的作用就是用于生成一个整数集合。

range函数接收3个参数,如下:

range(开始值, 结束值, 步长)
range(开始值, 结束值)					# 步长可以省略,默认为1
range(结束值)								# 开始值也可以省略,默认为1

生成的集合,包含开始值,不包含结束值。

举个栗子:

data = range(4, 10, 2)		# 生成一个整数集合,从4开始生产,步长为2,就是每次递增2,不包含10
for item in data:					# 循环遍历打印数据集合
    print(item)

打印结果:

4
6
8

所以如果我们想让一个循环执行5次,可以如下这样写:

for item in range(5):			# 数据集合的内容[0, 1, 2, 3, 4]
    # 执行的代码
变量作用域

看一下下面的代码:

for item in range(5):
    item *= 2

print(item)

item 为临时变量,它的作用域只限定在for循环内部。

但是实际上上面的代码是可以访问到的,但是在编程规范栅格是不允许的,不建议这么做。

3 循环嵌套

循环是可以相互嵌套的,while和for循环中可以再次嵌套while和for循环。

例如每天给小红送10多玫瑰花,坚持100天。

day = 1;  																				# 记录第几天
while day <= 100:  																# 外层循环用于循环天数
    roseCount = 1

    while roseCount <= 10:  											# 内层循环用于循环花的朵数
        print(f"第{day}天,第{roseCount}朵玫瑰花")
        roseCount += 1  													# 朵数+1

    day += 1																			# 天数+1

注意空格的缩进和代码的层次关系。

同样使用for循环也可以实现:

for day in range(1, 101):  																# 外层循环用于循环天数
    for roseCount in range(1, 11):  											# 内层循环用于循环花的朵数
        print(f"第{day}天,第{roseCount}朵玫瑰花") 		

4 中断循环

我们在前面终止循环,主要是靠不满足条件时自动跳出。这样的话,必须每一次的循环都执行完成,到达条件判断的时候才能跳出。

但是有时候,我们不得不提前退出循环,或者终止当前的循环继续后面的循环,这个时候就需要break和continue关键字了。

break 语句

break 关键字用于直接结束当前所在的 while 或 for 循环。

举个栗子:

如果一个循环,想在执行第三次的时候跳出:

i = 0
while i < 10:
    if i == 3:
        break;
    print(f"i={i}")
    i += 1

else:
    print("没有执行break")

执行结果:

i=0
i=1
i=2

可以看到 i = 3 时,跳出了循环。

后面的else中的语句也没有打印啊,后面的break只会在没有执行break的时候执行,如果执行了break,就不会执行else。

break只会跳出其所在的循环

for i in range(1, 10):
    for j in range(1, 10):
        if j == 3:
            break

        print(f"i={i}, j={j}")

上面的代码,break只能跳出内部的那一个循环。

continue 语句

continue的作用是中断本次循环,直接进入下一次循环,适用在while和for循环中。

举个栗子:

循环5次,在第三次的时候跳过,继续后面的执行:

for i in range(0, 5):
    if i == 3:
        continue;

    print(f"i={i}")

执行结果:

i=0
i=1
i=2
i=4

死循环

在使用while循环的时候,一定要注意判断条件,否则容易编程死循环。

例如,直接设置循环条件为True:

while True:
    print("死循环")

或者,忘记更新判断条件中的变量值,也会变成死循环:

i = 0
while i < 10:
    print("死循环")

死循环不一定是不对的,有时候我们还需要死循环帮我们做一些事情,要根据实际需求来。

5 练习

随机生成一个1-100的整数,然后在键盘输入数字来猜,猜不对,调试大了还是小了,猜对了,跳出循环。

在这里我们需要生成一个随机数,需要用到一个包,所以需要引入生成随机数的包,使用 import random 来引入,然后使用 randint 函数来生成一个 1~100 的整数。

import random

# 先创建一个随机数
goal = random.randint(1, 100)

while True:
    value = input("请猜随机数的大小:")
    value = int(value)

    if value == goal:
        print("猜对了!!!")
        break
    elif value < goal:
        print("猜小了!")
    else:
        print("猜大了!")
  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山石岐渡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值