50 选择结构

常见的选择结构有单分支选择结构、双分支选择结构、多分支选择结构及嵌套的分支结构,也可以构造跳转表来实现类似的逻辑。循环结构和异常处理结构中也可以实现带有 else 子句,可以看作特殊形式的选择结构。

所有的 Python 合法表达式都可以作为条件表达式,包括含有函数调用的表达式。在 Python 的语法中,条件表达式不允许使用赋值运算符 "=",避免了误将关系运算符 "==" 写成赋值运算符 "=" 带来的麻烦。在条件表达式中使用赋值运算符 "=" 将抛出异常,提示语法错误。

1 单分支选择结构

cpp 复制代码
x = input('x, y:')
a, b = map(int, x.split())
if a > b:
    a, b = b, a
print(a, b)
cpp 复制代码
if 3 > 2: print('True')
if True: print('hello');print('world')

2 双分支选择结构

cpp 复制代码
# 通过鸡兔同笼问题演示双分支结构的用法
m, n = map(int, input('m, n: ').split())
y = (n - 2 * m) / 2
if int(y) == y:
    print('x, y:', int(m - y), int(y))
else:
    print('No solution due to data error')

Python 提供了一个三元运算符,并且在三元运算符构成的表达式中还可以嵌套三元运算符,可以实现与选择结构相似的效果。语法为
value1 if condition else value2

cpp 复制代码
a = 5
print(6) if a > 3 else print(5)
print(6 if a > 3 else 5)  # 结果与上一行代码一样,但代码含义不同

b = 6 if a > 13 else 9  # 赋值运算符的优先级非常低
print(b)

import math

# 还没有导入 random 模块
x = math.sqrt(9) if 5 > 3 else random.randint(1, 100)
print(x)

虽然三元运算符可以嵌套使用,可以实现复杂的多分支选择结构的效果,但这样的代码可读性非常差,不建议使用。

cpp 复制代码
def func(x):
    return x * x


x = 3
print((1 if x > 2 else 0) if func(x) > 5 else ('a' if x < 5 else 'b'))
x = 0
print((1 if x > 2 else 0) if func(x) > 5 else ('a' if x < 5 else 'b'))

3 多分支选择结构

cpp 复制代码
def func(score):
    if score > 100 or score < 0:
        return 'wrong score'
    elif score >= 90:
        return 'A'
    elif score >= 80:
        return 'B'
    elif score >= 70:
        return 'C'
    elif score >= 60:
        return 'D'
    else:
        return 'E'


score = [68, 98, 45, 22, 70, 72, 84]
print(score)
print([func(i) for i in score])

4 选择结构的嵌套

cpp 复制代码
def func(score):
    star = 'DCBAA*'
    if score > 100 or score < 0:
        return 'wrong score'
    else:
        index = (score - 60) // 10
        if index >= 0:
            return star[index]
        else:
            return star[-1]


score = [68, 98, 45, 22, 70, 72, 84]
print(score)
print([func(i) for i in score])
相关推荐
消失的旧时光-19433 分钟前
C 语言如何实现“面向对象”?—— 从 struct + 函数指针,到 Linux 内核设计思想
linux·c语言·开发语言
langzaibeijing8 分钟前
性价比高的AI应用厂家
大数据·人工智能·python
Gerardisite9 分钟前
企业微信 API 能做什么?
人工智能·python·自动化·企业微信
测试员周周15 分钟前
【Appium 系列】第09节-数据驱动测试 — YAML 数据 + parametrize
服务器·数据库·人工智能·python·测试工具·语言模型·appium
不能隔夜的咖喱16 分钟前
黑马ai大模型笔记(自用,比较粗糙)
linux·windows·python
周公17 分钟前
记一次在双 RTX 3090 工作站上部署 vLLM 与 Qwen3.6-35B-AWQ 的实战记录
python·ai·llama·vllm·ollama
小短腿的代码世界21 分钟前
Qt时间日期处理与QTimer高级应用:从毫秒级精度到跨平台定时器的完整架构解析
开发语言·qt·架构
TAN-90°-26 分钟前
Java 6——成员变量初始值 object equals和== toString instanceof 参数传递问题
java·开发语言
yexuhgu28 分钟前
html如何修改备注
jvm·数据库·python
AI技术控29 分钟前
Prompt Engineering 在企业大模型应用中的实践:从提示词模板到可控输出
人工智能·python·深度学习·语言模型·自然语言处理·prompt