选择结构

对应教学日历:讲次 2-3


一、条件的表示

关系表达式

用关系运算符连接:< <= > >= == !=

结果:真 → True,假 → False

逻辑表达式

用逻辑运算符连接:and(与)、or(或)、not(非)

age = 25
age >= 18 and age <= 60   # True
age < 18 or age > 60      # False
not age < 18              # True

Python中的”真假”概念

  • 0, 0.0, ""(空字符串), [](空列表), {}(空字典), None, False
  • 一切非零值(包括负数)
if 3:        # 永远为真
if -1:       # 永远为真
if 0:        # 永远为假
if "hello":  # 永远为真(非空字符串)
if "":       # 永远为假(空字符串)

二、if 语句

单分支

if 表达式:
    语句组

双分支

if 表达式:
    语句组一
else:
    语句组二

多分支(elif)

if 表达式1:
    语句组一
elif 表达式2:
    语句组二
else:
    语句组三

注意:Python用 elif 而不是 else if

if 语句的嵌套

if 表达式1:
    if 表达式2:     # 内嵌 if
        语句1
    else:
        语句2
else:
    语句3

注意:Python用缩进(而非花括号)表示代码块,不存在”悬空else”问题。

成绩评级示例

score = float(input("请输入成绩:"))
if score >= 85:
    print("成绩优")
elif score >= 70:
    print("成绩良")
elif score >= 60:
    print("已及格")
else:
    print("不及格")

三、random库

import random
random.randint(a, b)    # 生成[a, b]之间的随机整数

幸运数字7小游戏

import random
lucky = random.randint(600, 800)
print("你抽中的的是%d" % lucky)
a = lucky // 100
b = lucky % 100 // 10
c = lucky % 10
num = (a == 7) + (b == 7) + (c == 7)  # True=1, 统计7的个数
if num == 3:
    print("恭喜你!小锦鲤!")
elif num == 2:
    print("哇,幸运小星星就是你!")
elif num == 1:
    print("手气不错哟!")
else:
    print("继续努力!")

要点

  • (a == 7) + (b == 7) + (c == 7) 利用布尔值为1/0的特性统计次数
  • // 整除取百位、十位,% 取余取个位

三数排序

import random
first = random.randint(1, 10)
second = random.randint(1, 10)
third = random.randint(1, 10)
print("排序前为:%d,%d,%d" % (first, second, third))
if first > second:
    first, second = second, first    # Python交换变量
if first > third:
    first, third = third, first
if second > third:
    second, third = third, second
print("排序后为:%d,%d,%d" % (first, second, third))

作业示例

密码验证(循环+选择)

while True:
    password = input("请输入密码:")
    if len(password) != 6:
        print("长度为6位,请重试!")
        continue
    if password == "123456":
        print("恭喜您,密码正确!")
        break
    else:
        print("密码有误,请重试!")

要点

  • while True 创建死循环,用 break 退出
  • continue 跳过本次循环,进入下一次判断

完全数判断

total = 0
num = int(input("请输入一个整数:"))
for i in range(1, num // 2 + 1):
    if num % i == 0:
        total = total + i
if total == num:
    print("{}是一个完全数".format(num))
elif total > num:
    print("{}是一个丰沛数".format(num))
else:
    print("{}是一个不足数".format(num))

要点

  • range(1, num // 2 + 1) 只需检查到一半即可

素数判断(双重循环)

for i in range(2, 101):
    k = 0
    for j in range(2, i):
        if i % j == 0:
            k = 1
            break
    if k == 0:
        print(i, end=" ")

要点

  • break 终止内层循环
  • k 作为标志位:0表示素数,1表示非素数

作业重点

  • Python用 elif 而不是 else if
  • Python用缩进表示代码块,不需要花括号
  • True 等价于 1False 等价于 0,可用于计数
  • random.randint(a, b) 生成 [a, b] 之间的随机整数
  • Python支持交换变量:a, b = b, a
  • while True + break 实现循环直到满足条件
  • continue 跳过本次循环,break 终止整个循环