一、引言
在编程中,条件控制是实现逻辑判断的基础。Python 提供了多种方式来实现条件控制,包括
1 | if |
语句、
1 | elif |
语句和
1 | else |
语句等。掌握这些基础可以帮助你写出更加灵活和智能的程序。
二、基本的条件控制语句
1. if 语句
用途:用于基于某个条件执行一段代码块。
语法:
1 if condition:<br> <em># 条件为真时执行的代码</em>
示例:编写一个程序,判断一个数字是否大于 10。
1 number = 15<br><br>if number > 10:<br> print("这个数字大于 10")
输出:
1 这个数字大于 10
解释:这里
1 | number > 10 |
是一个条件表达式。如果这个表达式的值为
1 | True |
,那么打印语句就会被执行。
技巧:在判断之前可以先检查变量是否已经定义,避免运行时错误。
1 number = input("请输入一个数字:")<br><br>if number.isdigit(): <em># 检查输入是否为数字</em><br> number = int(number)<br> if number > 10:<br> print("这个数字大于 10")<br>else:<br> print("请输入有效的数字")
注意事项:确保在使用条件语句时考虑所有可能的情况,避免遗漏。
2. if-else 语句
用途:用于在条件为真或假时分别执行不同的代码块。
语法:
1 if condition:<br> <em># 条件为真时执行的代码</em><br>else:<br> <em># 条件为假时执行的代码</em>
示例:判断一个年份是否为闰年。
1 year = 2024<br><br>if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:<br> print(year, "是闰年")<br>else:<br> print(year, "不是闰年")
输出:
1 2024 是闰年
解释:闰年的规则是能被 4 整除但不能被 100 整除,或者能被 400 整除。
技巧:可以将复杂的条件拆分成多个简单的条件组合。
1 is_divisible_by_4 = year % 4 == 0<br>is_not_divisible_by_100 = year % 100 != 0<br>is_divisible_by_400 = year % 400 == 0<br><br>if is_divisible_by_4 and is_not_divisible_by_100 or is_divisible_by_400:<br> print(year, "是闰年")<br>else:<br> print(year, "不是闰年")
注意事项:在处理多个条件时,注意运算符的优先级。
3. if-elif-else 语句
用途:用于根据多个条件选择执行不同的代码块。
语法:
1 if condition1:<br> <em># 条件 1 为真时执行的代码</em><br>elif condition2:<br> <em># 条件 2 为真时执行的代码</em><br>else:<br> <em># 其他情况执行的代码</em>
示例:根据成绩等级输出评语。
1 score = 85<br><br>if score >= 90:<br> print("优秀")<br>elif score >= 70:<br> print("良好")<br>else:<br> print("加油")
输出:
1 良好
解释:首先检查
1 | score >= 90 |
,如果为真,则打印“优秀”。否则,再检查
1 | score >= 70 |
,如果为真,则打印“良好”。否则,打印“加油”。
技巧:可以根据实际情况添加更多的
1 | elif |
分支。
1 if score >= 90:<br> print("优秀")<br>elif score >= 80:<br> print("良好")<br>elif score >= 70:<br> print("合格")<br>elif score >= 60:<br> print("及格")<br>else:<br> print("不及格")
注意事项:在编写多个条件分支时,注意顺序的重要性,确保每个条件都能正确地被评估。
三、进阶的条件控制技术
1. 嵌套 if 语句
用途:在一个 if 语句内部再包含另一个 if 语句,实现更复杂的逻辑判断。
语法:
1 if outer_condition:<br> if inner_condition:<br> <em># 条件为真时执行的代码</em><br> else:<br> <em># 内部条件为假时执行的代码</em><br>else:<br> <em># 外部条件为假时执行的代码</em>
示例:判断一个用户是否成年以及是否有驾驶资格。
1 age = 20<br>has_driving_license = True<br><br>if age >= 18:<br> if has_driving_license:<br> print("你可以开车")<br> else:<br> print("你需要考取驾照")<br>else:<br> print("你还未成年")
输出:
1 你可以开车
解释:首先检查年龄是否大于等于 18 岁,如果为真,则进一步检查是否有驾驶执照。否则,打印“你还未成年”。
技巧:嵌套 if 语句可以用来处理多个层次的逻辑关系。
1 if age >= 18:<br> if has_driving_license:<br> print("你可以开车")<br> elif age >= 16:<br> print("你可以申请驾照")<br> else:<br> print("你需要等到 16 岁才能申请驾照")<br>else:<br> print("你还未成年")
注意事项:嵌套层数过多可能会导致代码难以阅读和维护,尽量保持简洁。
2. 使用逻辑运算符
用途:通过逻辑运算符(如
1 | and |
、
1 | or |
和
1 | not |
)来组合多个条件,实现更复杂的逻辑判断。
示例:判断用户是否满足特定条件。
1 age = 25<br>is_student = False<br><br>if age >= 18 and not is_student:<br> print("你可以申请信用卡")<br>else:<br> print("你不满足条件")
输出:
1 你可以申请信用卡
解释:这里使用了
1 | and |
运算符和
1 | not |
运算符。只有当年龄大于等于 18 岁并且不是学生时,才会打印“你可以申请信用卡”。
技巧:合理使用逻辑运算符可以使条件判断更加简洁明了。
1 if age >= 18 and (not is_student or income >= 20000):<br> print("你可以申请信用卡")<br>else:<br> print("你不满足条件")
注意事项:在使用逻辑运算符时,要注意运算符的优先级,必要时使用括号来明确优先级。
3. 使用条件表达式
用途:条件表达式是一种简化形式的 if-else 语句,可以在一行内实现条件判断。
语法:
1 value = some_value if condition else another_value
示例:根据年龄返回相应的评价。
1 age = 25<br><br>result = "成年人" if age >= 18 else "未成年人"<br>print(result)
输出:
1 成年人
解释:这里使用了条件表达式
1 | age >= 18 |
,如果条件为真,则
1 | result |
被赋值为
1 | "成年人" |
,否则赋值为
1 | "未成年人" |
。
技巧:条件表达式适用于简单的条件判断,可以使代码更加简洁。
1 score = 85<br>grade = "优秀" if score >= 90 else ("良好" if score >= 70 else "加油")<br>print(grade)
注意事项:条件表达式虽然简洁,但嵌套过多会降低代码的可读性,要适度使用。
4. 使用列表推导式和条件表达式
用途:通过列表推导式结合条件表达式来简化循环和条件判断。
语法:
1 result = [expression for item in iterable if condition]
示例:找出一个列表中所有偶数的平方。
1 numbers = [1, 2, 3, 4, 5, 6]<br><br>squares = [num ** 2 for num in numbers if num % 2 == 0]<br>print(squares)
输出:
1 [4, 16, 36]
解释:这里使用了列表推导式
1 | [num ** 2 for num in numbers if num % 2 == 0] |
,只有当
1 | num |
是偶数时,才会计算其平方并加入到结果列表中。
技巧:列表推导式结合条件表达式可以使代码更加简洁。
1 even_squares = [num ** 2 if num % 2 == 0 else num for num in numbers]<br>print(even_squares)
注意事项:列表推导式虽然简洁,但嵌套过多会降低代码的可读性,要适度使用。
五、实战案例:成绩管理系统
假设我们已经实现了基本的成绩管理系统,现在将进一步完善系统功能,使其能够处理更多的场景。
需求: 1. 输入学生的姓名、年龄和分数。 2. 根据分数输出相应的评价(优秀、良好、合格、及格、不及格)。 3. 记录学生的基本信息,并保存到文件中。 4. 提供查询功能,允许用户查询学生的成绩和评价。
步骤:
1. 输入学生信息:
- 获取学生的姓名、年龄和分数。
- 检查输入的有效性。
1 import json<br><br>def get_student_info():<br> name = input("请输入学生姓名:")<br> age = input("请输入学生年龄:")<br> score = input("请输入学生成绩:")<br><br> if not name.strip() or not age.isdigit() or not score.isdigit():<br> print("输入有误,请重新输入!")<br> return None<br><br> age = int(age)<br> score = int(score)<br><br> return {"name": name, "age": age, "score": score}
2. 根据分数输出评价:
- 判断分数范围并输出相应的评价。
1 def evaluate_score(score):<br> if score >= 90:<br> return "优秀"<br> elif score >= 80:<br> return "良好"<br> elif score >= 70:<br> return "合格"<br> elif score >= 60:<br> return "及格"<br> else:<br> return "不及格"
3. 记录学生信息:
- 将学生信息保存到 JSON 文件中。
1 def save_student_info(student_info):<br> with open("students.json", "a") as file:<br> json.dump(student_info, file)<br> file.write("\n")
4. 查询学生信息:
- 读取文件中的学生信息,并根据姓名查询成绩和评价。
1 def query_student_info(name):<br> with open("students.json", "r") as file:<br> students = [json.loads(line) for line in file]<br><br> for student in students:<br> if student["name"] == name:<br> evaluation = evaluate_score(student["score"])<br> print(f"{name} 的成绩为 {evaluation}")<br> return<br><br> print(f"没有找到 {name} 的信息")
5. 主程序:
- 输入学生信息。
- 输出评价。
- 保存学生信息。
- 查询学生信息。
1 def main():<br> while True:<br> print("请选择操作:")<br> print("1. 添加学生信息")<br> print("2. 查询学生信息")<br> print("3. 退出")<br> choice = input("请输入选项:")<br><br> if choice == "1":<br> student_info = get_student_info()<br> if student_info:<br> evaluation = evaluate_score(student_info["score"])<br> print(f"{student_info['name']} 的成绩为 {evaluation}")<br> save_student_info(student_info)<br> elif choice == "2":<br> name = input("请输入学生姓名:")<br> query_student_info(name)<br> elif choice == "3":<br> break<br> else:<br> print("无效的选项,请重新输入!")<br><br>if __name__ == "__main__":<br> main()
运行结果:
1 请选择操作:<br>**1.** 添加学生信息<br>**2.** 查询学生信息<br>**3.** 退出<br>请输入选项:1<br>请输入学生姓名:张三<br>请输入学生年龄:20<br>请输入学生成绩:85<br>张三 的成绩为 良好<br>请选择操作:<br>**1.** 添加学生信息<br>**2.** 查询学生信息<br>**3.** 退出<br>请输入选项:2<br>请输入学生姓名:张三<br>张三 的成绩为 良好<br>请选择操作:<br>**1.** 添加学生信息<br>**2.** 查询学生信息<br>**3.** 退出<br>请输入选项:3
分析:
- 输入检查:在获取学生信息时,检查了姓名、年龄和分数的有效性,避免了无效输入。
- 条件判断:使用了嵌套的 if-elif-else 语句来判断分数范围,并输出相应的评价。
- 数据保存:将学生信息以 JSON 格式保存到文件中,方便后续查看和管理。
- 查询功能:通过读取文件中的数据,并根据姓名查询学生的成绩和评价。
技巧和注意事项:
- 在输入检查时,使用了字符串和整数类型的转换函数,确保数据类型的一致性。
- 条件判断时,合理安排了条件的顺序,使得逻辑更加清晰。
- 数据保存时,使用了文件操作函数,确保数据的安全性和持久性。
- 查询功能时,使用了列表推导式来读取文件中的数据,并通过循环查找指定的学生信息。