引言

  简单回顾第一篇章,我们已经可以让程序输入输出,并记住数据了。那么如果我想让程序根据用户的年龄推荐不同的电影,该如何去做?如果我想让程序重复计算1到100的和,难道要写100行代码吗?如果用户不小心输入了文字而不是年龄数字,程序崩溃了怎么办?今天,我们就来一起学习让程序自主判断、不知疲倦、处变不惊的三大法宝。

一、程序的“决策大脑”:条件判断语句

  1、什么是条件判断语句

  它是程序中的“十字路口”,根据条件的真假,决定执行哪一段代码,其中一共涉及三种语句,分别为if语句、if+else语句和if+elif+else语句。

2、最简单的选择:if语句

  if语句代码执行的走向会有两种情况:

  第一种是程序按顺序开始执行代码1,遇到条件表达式时,开始判断条件表达式是否满足条件,若满足则开始执行代码2最后执行代码3。

  第二种情况是程序开始执行代码一,遇到条件表达式时,开始判断条件表达式是否满足条件,若不满足条件则跳过代码2直接执行代码3。

代码1
判断条件
  代码2(满足判断条件执行)
代码3

  在使用if语句前需要注意:

1)、if是Python中的关键字。

2)、条件判断表达式用于判断条件是否满足,可以是条件表达式或者判断语句。

3)、条件判断表达式后面有一个冒号,不要忘记。

4)、代码2中至少包含一行代码,并且不能与if对齐,需要缩进一个级别,默认一个级别是4个空格。

  当条件满足执行代码2时,条件判断语句有以下7种情况

1)、A==B

if 3==4:
    print(1)
print(2)

2)、A>B

  

if 3>4:
    print(1)
print(2)

3)、A>=B

if 3>=4:
    print(1)
print(2)

4)、A<B

if 3<4:
    print(1)
print(2)

5)、A<=B

if 3<=4:
    print(1)
print(2)

6)、A!=B(不等于)

if 3!=4:
    print(1)
print(2)

7)、表达式

if 3+4<3*4:
    print(1)
print(2)

3、二选一:if else语句

  if else语句是在if语句上的一个扩充,其使用形式如下:

if 条件表达式:
    # 执行A(满足条件)
else:
    # 执行B(不满足条件)

  这里举一个简单的案例,判断数字的奇偶性:输入一个数,如果输入的数与2整除的余数为0则满足条件执行print("这是一个偶数"),不满足则执行else下的print("这是一个奇数")。

a = int(input("请输入一个数字:"))
if a % 2 == 0:
    print("这是一个偶数。")
else:
    print("这是一个奇数。")

4、多路分支:if+elif+else语句

  if+elif+else语句是if+else语句基础上的扩充,其使用形式如下:

if 条件1:
    # 执行代码块1
elif 条件2:
    # 执行代码块2
else:
    # 上述条件都不满足时执行

  该语句的执行逻辑是从上到下依次判断,一旦某个条件为True,就执行对应的代码块,然后跳出整个判断结构。这里有一个简单案例:成绩评级器:输入一个数字作为成绩,通过不同的数字区段将成绩分为五个等级并输出。

score = float(input("请输入成绩(满分一百): "))
if score >= 90:
    print("您的等级是:A")
elif score >= 80:
    print("您的等级是:B")
elif score >= 70:
    print("您的等级是:C")
elif score >= 60:
    print("您的等级是:D")
else:
    print("您的等级是:F,要加把劲哦!")

5、更复杂的逻辑:多个elif语句和条件判断语句的嵌套

  当需要对多个条件进行判断时可以插入多个elif语句,其使用形式如下:

if 条件1:
  代码块1
elif 条件2:
  代码块2
elif 条件3:
  代码块3
...
else:
  代码块n

    条件判断语句也可以包含一个或多个条件判断语句,这里结合多个elif语句来实现一个简单的案例,智能门禁:判断一个人是否可以进入某个区域。条件:必须已登记(是/否),且要么年龄大于18岁,要么有成年人陪同(是/否)。

a = input("您是登记了吗?(是/否): ") == "是"
age = int(input("请输入您的年龄: "))
b = input("有成年人陪同吗?(是/否): ") == "是"

if a:
    if age >= 18:
        print("欢迎光临!")
    elif b:
        print("欢迎光临!")
    else:
        print("对不起,您不符合年龄要求且无成年人陪同。")
else:
    print("对不起,仅限已登记进入。")

  当一次需要判断多个条件是也可以使用and或or,当需要判断满足条件A同时也要满足条件B可以使用and将条件A和连接起来,当需要判断满足条件A和B中的一个条件时,可以使用or连接。因此上述代码也可改为:

a = input("您是登记了吗?(是/否): ") == "是"
age = int(input("请输入您的年龄: "))
b = input("有成年人陪同吗?(是/否): ") == "是"

if a:
    if age >= 18 or b:
        print("欢迎光临!")
    else:
        print("对不起,您不符合年龄要求且无成年人陪同。")
else:
    print("对不起,仅限已登记进入。")

  可见运行效果也是一样的。

6、简洁的写法:if else复合语句

  我们要学会简单赋值场景下简化代码,if else的复合语句就可以做到这一点。其语法结构如下:

表达式1 if 条件判断 else 表达式2

  这里还是以判断数字奇偶性为例:

a = int(input("请输入一个数字:"))
# 复合写法
a = "偶数" if a % 2 == 0 else "奇数"
print(a)

二、不知疲倦的引擎 —— 循环语句

1、精准的重复:for 循环

  for循环中其代码块会被执行很多次,循环内容可以是字符串、列表、字典、文件等可迭代的数据,在每一次循环时,会依次将循环内容赋值给变量,且每赋值一次会执行一次代码块。其使用形式为:

for 变量 in 序列:
    # 循环体,对序列中的每一个元素执行一次

  for循环还有一个还朋友,他就是range() 函数 :用于生成一个整数序列。

a=list(range(5))
b=list(range(1, 6)) 
c=list(range(0, 10, 2))
print(a,b,c)

  这里我们举一个简单的例子,计算1到100的和。

a = 0
for i in range(1, 101): # 注意range是左闭右开的区间
    a += i # 等同于a = a + i
print(f"1到100的和是:{a}")

  与if语句一样,for循环也有复合写法,其语法结构如下:

表达式 for 变量 in 循环内容

  因此计算1到100的和我们也可以写成

a = 0
a=sum([a+i for i in range(1, 101)])# 注意range是左闭右开的区间
print(f"1到100的和是:{a}")

  运行结果依然不变

2、 条件性的重复:while 循环

  while循环和for循环是有一定区别的,for循环的次数主要时由其循环内容决定的,而while循环则是与条件判断表达式的结果决定的,其语法结构如下:

while 条件:
    # 循环体
    # 通常需要在循环体内改变条件,否则可能成为“死循环”

 例如我们熟知的猜数字游戏就可以通过while循环来完成,程序会随机生成一个1到100之间的整数,然后通过循环不断提示用户输入猜测的数字,并根据输入给出“猜小了”、“猜大了”的反馈,直到猜中正确的数字,程序才会输出恭喜信息并结束循环。

import random # 导入随机数模块
a = random.randint(1, 100) # 生成1-100的随机数
guess = 0
while guess != a:
    guess = int(input("请猜一个1到100之间的数字: "))
    if guess < a:
        print("猜小了!")
    elif guess > a:
        print("猜大了!")
    else:
        print("恭喜你,猜对了!")

3、循环套循环:循环嵌套

  嵌套循环是指在一个循环语句的循环体内包含另一个完整的循环结构,从而形成多层循环嵌套。这种结构常用于处理需要多重迭代的任务,例如for循环中可以嵌套一个或多个for循环语句或者while语句,同理while循环中也可以嵌套一个或多个for循环语句或者while语句。

  这里博主给大家举一个简单的例子,打印我们的九九乘法口诀表。

for a in range(1, 10): # 外层循环控制行
    for b in range(1, a+1): # 内层循环控制列
        print(f"{b}×{a}={b*a}", end="\t") # \t是制表符,对齐内容
    print() # 换行

  其中外层循环控制行数,内层循环控制每行的列数,通过格式化字符串输出每个乘法算式并用制表符对齐,最后在每行结束时换行,从而形成三角形结构。

4、循环中的控制:break 和 continue

  break和continue时Python中的关键字,用于控制循环语句,一般与if语句一起使用可直接当作一行语句。

  break语句的功能是跳出循环,使循环语句结束运行并且退出当前循环。

# 示例:找到第一个能被9整除的数就停止
for i in range(1, 100):
    if i % 9 == 0:
        print(f"找到了:{i}")
        break

  continue语句的功能则是跳过当前循环直接返回循环语句再次循环,在for循环内就会返回fo语句继续下一个元素的赋值,而在while循环内就会返回while语句再次进行条件判断。

#示例:打印1-10中的所有奇数
for a in range(1, 11):
    if a % 2 == 0:
        continue # 如果是偶数,跳过打印
    print(a)

三、程序的安全气囊 —— 异常处理

1、未雨绸缪:异常处理语句(try...except)

  异常处理是必要的,因为程序运行中常会遇到不可预料的错误情况,如用户输入了无效数据、文件不存在、网络连接中断或除零操作等。通过异常处理可以捕获和管理这些意外情况,防止程序崩溃。其语法结构如下:

try:
    # 可能会出错的代码
except 错误类型:
    # 如果发生指定类型的错误,执行这里的代码进行处理

常见的错误类型有 ValueError(值错误), ZeroDivisionError(除零错误), FileNotFoundError等。

  这里我们以一个简易除法计算器为例。它能够处理用户可能输入的两种错误:1、输入的不是数字。2、除数为0。

try:
    a = float(input("输入被除数:"))
    b = float(input("请输入除数:"))
    c = a / b
    # 如果一切正常,显示结果
    print(f"{a} ÷ {b} = {c}")

except ValueError:
    # 处理输入非数字的情况
    print("错误:请输入有效的数字!")

except ZeroDivisionError:
    # 处理除数为0的情况
    print("错误:除数不能为零!")

  本章我们一起学会了用 if, elif, else 让程序有了判断力,我们学会了用 for 和 while 让程序不知疲倦地工作,我们学会了用 try...except 给程序装上安全气囊。我们已经让代码“活”了起来。下一篇,我们将学习数据结构,包括列表、元组、字典和集合,它们是用来组织和存储大量数据的强大容器,能让我们的程序处理更复杂的信息。

Logo

更多推荐