四、控制流:让程序有逻辑
4.1 条件语句(if-elif-else)
# 基本if语句
age = 18
if age >= 18:
print("成年人")
else:
print("未成年人")
# 多重条件
score = 85
if score >= 90:
grade = "优秀"
elif score >= 60:
grade = "及格"
else:
grade = "不及格"
print(f"成绩等级:{grade}")
# 嵌套条件
has_ticket = True
has_id = False
if has_ticket:
if has_id:
print("可以入场")
else:
print("请出示身份证")
else:
print("请先购票")
4.2 循环语句
for循环:用于遍历序列
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 使用range()生成数字序列
for i in range(5): # 0,1,2,3,4
print(f"第{i}次循环")
for i in range(1, 10, 2): # 1,3,5,7,9
print(f"奇数:{i}")
# 遍历字符串
for char in "Python":
print(char)
while循环:条件满足时重复执行
# 基本while循环
count = 0
while count < 5:
print(f"计数:{count}")
count += 1
# 无限循环(需要break退出)
while True:
user_input = input("输入'exit'退出:")
if user_input == "exit":
break # 退出循环
print(f"你输入了:{user_input}")
# continue:跳过本次循环
for i in range(10):
if i % 2 == 0:
continue # 跳过偶数
print(f"奇数:{i}")
五、数据结构
5.1 列表(List)
列表是Python中最常用的数据结构,可以存储任意类型的元素:
# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14]
# 访问元素
print(fruits[0]) # 苹果(索引从0开始)
print(fruits[-1]) # 橙子(负数表示从后往前)
print(fruits[1:3]) # ['香蕉', '橙子'](切片)
# 修改元素
fruits[1] = "葡萄"
print(fruits) # ['苹果', '葡萄', '橙子']
# 常用操作
fruits.append("西瓜") # 末尾添加
fruits.insert(1, "草莓") # 指定位置插入
fruits.remove("苹果") # 删除指定元素
last = fruits.pop() # 删除并返回最后一个
print(f"列表长度:{len(fruits)}")
# 列表推导式(高级用法)
squares = [x ** 2 for x in range(10)] # 生成0-9的平方
even_numbers = [x for x in range(20) if x % 2 == 0] # 筛选偶数
5.2 元组(Tuple)
元组是不可变的列表,创建后不能修改:
# 创建元组
point = (10, 20)
colors = ("红", "绿", "蓝")
single = (1,) # 单元素元组需要逗号
# 访问元素
print(point[0]) # 10
print(colors[1]) # 绿
# 解包
x, y = point
print(f"x={x}, y={y}")
# 元组不可修改
# point[0] = 5 # 错误!
5.3 字典(Dictionary)
字典存储键值对,类似于现实中的词典:
# 创建字典
person = {
"name": "张三",
"age": 25,
"city": "北京"
}
# 访问值
print(person["name"]) # 张三
print(person.get("age")) # 25
print(person.get("gender", "未知")) # 不存在时返回默认值
# 修改/添加
person["age"] = 26 # 修改
person["job"] = "工程师" # 添加新键值对
# 删除
del person["city"]
age = person.pop("age") # 删除并返回值
# 遍历
for key, value in person.items():
print(f"{key}: {value}")
for key in person.keys(): # 遍历键
print(key)
for value in person.values(): # 遍历值
print(value)
5.4 集合(Set)
集合存储无序、不重复的元素:
# 创建集合
fruits = {"苹果", "香蕉", "橙子"}
numbers = set([1, 2, 3, 2, 1]) # 结果为 {1, 2, 3}
# 添加/删除
fruits.add("葡萄")
fruits.remove("香蕉")
# 集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a & b) # 交集:{3, 4}
print(a | b) # 并集:{1, 2, 3, 4, 5, 6}
print(a - b) # 差集:{1, 2}
print(a ^ b) # 对称差:{1, 2, 5, 6}
六、函数
6.1 定义和调用函数
# 基本函数
def greet(name):
"""打印问候语""" # 文档字符串
print(f"你好,{name}!")
# 调用函数
greet("李四")
# 带返回值的函数
def add(a, b):
"""计算两数之和"""
return a + b
result = add(5, 3)
print(result) # 8
# 多个返回值
def get_person():
return "张三", 25, "北京" # 返回元组
name, age, city = get_person()
print(name, age, city)
6.2 参数类型
# 位置参数(必须按顺序传递)
def power(base, exponent):
return base ** exponent
print(power(2, 3)) # 8
# 默认参数
def greet(name, greeting="你好"):
print(f"{greeting},{name}")
greet("张三") # 你好,张三
greet("李四", "早上好") # 早上好,李四
# 关键字参数
def introduce(name, age, city):
print(f"我是{name},今年{age}岁,来自{city}")
introduce(age=25, city="北京", name="王五") # 顺序可以任意
# 可变参数
def sum_all(*args):
"""接收任意数量参数"""
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3, 4, 5)) # 15
# 关键字可变参数
def print_info(**kwargs):
"""接收任意数量关键字参数"""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="张三", age=25, city="北京")
6.3 变量作用域
# 全局变量
global_var = 100
def test_scope():
# 局部变量
local_var = 50
print(f"函数内访问全局变量:{global_var}")
print(f"函数内访问局部变量:{local_var}")
# 修改全局变量需要使用global
global global_var
global_var = 200
test_scope()
print(f"函数外访问全局变量:{global_var}")
# print(local_var) # 错误!无法访问局部变量
七、文件操作
7.1 读取文件
# 读取整个文件
with open("test.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
# 逐行读取
with open("test.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip()) # strip()去除换行符
# 读取所有行到列表
with open("test.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
print(f"文件共有{len(lines)}行")
7.2 写入文件
# 覆盖写入
with open("output.txt", "w", encoding="utf-8") as file:
file.write("第一行\n")
file.write("第二行\n")
# 追加写入
with open("output.txt", "a", encoding="utf-8") as file:
file.write("第三行(追加)\n")
# 写入多行
lines = ["苹果", "香蕉", "橙子"]
with open("fruits.txt", "w", encoding="utf-8") as file:
file.writelines(line + "\n" for line in lines)
八、异常处理
8.1 try-except语句
try:
# 可能出错的代码
num = int(input("请输入一个数字:"))
result = 10 / num
print(f"结果是:{result}")
except ValueError:
# 输入不是数字
print("输入无效,请输入数字")
except ZeroDivisionError:
# 除数为0
print("除数不能为0")
except Exception as e:
# 其他所有异常
print(f"发生错误:{e}")
else:
# 没有异常时执行
print("计算成功完成")
finally:
# 无论是否异常都执行
print("程序结束")
8.2 自定义异常
class AgeError(Exception):
"""年龄错误异常"""
pass
def check_age(age):
if age < 0:
raise AgeError("年龄不能为负数")
elif age > 150:
raise AgeError("年龄太大,不合理")
return age
try:
age = int(input("请输入年龄:"))
check_age(age)
print(f"年龄{age}有效")
except AgeError as e:
print(f"年龄验证失败:{e}")
except ValueError:
print("请输入有效的数字")
九、模块与包
9.1 导入模块
# 导入整个模块
import math
print(math.sqrt(16)) # 4.0
# 导入特定函数
from random import randint, choice
print(randint(1, 10)) # 1-10随机整数
print(choice(["苹果", "香蕉", "橙子"])) # 随机选择一个
# 导入所有内容(不推荐)
from datetime import *
print(datetime.now())
# 使用别名
import numpy as np
import pandas as pd
9.2 常用标准库
9.3 创建自己的模块
mymodule.py:
# 自定义模块
def say_hello(name):
return f"你好,{name}"
PI = 3.14159
class Person:
def __init__(self, name):
self.name = name
main.py:
# 导入自定义模块
import mymodule
print(mymodule.say_hello("张三"))
print(mymodule.PI)
p = mymodule.Person("李四")
print(p.name)
十、实战案例
将所学知识整合,创建一个简单的学生成绩管理系统:
# student_management.py
import json
import os
class StudentManager:
"""学生成绩管理系统"""
def __init__(self, filename="students.json"):
self.filename = filename
self.students = self.load_data()
def load_data(self):
"""加载数据"""
if os.path.exists(self.filename):
with open(self.filename, "r", encoding="utf-8") as f:
return json.load(f)
return []
def save_data(self):
"""保存数据"""
with open(self.filename, "w", encoding="utf-8") as f:
json.dump(self.students, f, ensure_ascii=False, indent=2)
print("数据保存成功!")
def add_student(self):
"""添加学生"""
print("\n--- 添加学生 ---")
name = input("姓名:")
try:
chinese = float(input("语文成绩:"))
math = float(input("数学成绩:"))
english = float(input("英语成绩:"))
except ValueError:
print("成绩输入无效,请重新输入")
return
student = {
"name": name,
"scores": {
"chinese": chinese,
"math": math,
"english": english
}
}
self.students.append(student)
self.save_data()
print(f"学生{name}添加成功!")
def show_all(self):
"""显示所有学生"""
if not self.students:
print("暂无学生数据")
return
print("\n--- 学生成绩列表 ---")
for i, student in enumerate(self.students, 1):
name = student["name"]
scores = student["scores"]
total = sum(scores.values())
avg = total / 3
print(f"{i}. {name} - 语文:{scores['chinese']} 数学:{scores['math']} 英语:{scores['english']} 总分:{total:.1f} 平均:{avg:.1f}")
def search_student(self):
"""搜索学生"""
name = input("请输入要搜索的学生姓名:")
found = False
for student in self.students:
if student["name"] == name:
scores = student["scores"]
total = sum(scores.values())
avg = total / 3
print(f"\n姓名:{name}")
print(f"语文:{scores['chinese']}")
print(f"数学:{scores['math']}")
print(f"英语:{scores['english']}")
print(f"总分:{total:.1f}")
print(f"平均:{avg:.1f}")
found = True
break
if not found:
print(f"未找到学生:{name}")
def delete_student(self):
"""删除学生"""
name = input("请输入要删除的学生姓名:")
for i, student in enumerate(self.students):
if student["name"] == name:
self.students.pop(i)
self.save_data()
print(f"学生{name}已删除")
return
print(f"未找到学生:{name}")
def run(self):
"""运行主程序"""
while True:
print("\n" + "="*30)
print("学生成绩管理系统")
print("="*30)
print("1. 添加学生")
print("2. 显示所有学生")
print("3. 搜索学生")
print("4. 删除学生")
print("5. 退出系统")
choice = input("请选择操作(1-5):")
if choice == "1":
self.add_student()
elif choice == "2":
self.show_all()
elif choice == "3":
self.search_student()
elif choice == "4":
self.delete_student()
elif choice == "5":
print("感谢使用学生成绩管理系统!")
break
else:
print("无效选择,请重新输入")
# 启动程序
if __name__ == "__main__":
manager = StudentManager()
manager.run()
对于初学者而言,最重要的是动手实践。不要停留在阅读文档,尽快创建你的第一个Python程序,然后逐步增加功能。随着一个个小项目的完成,你对Python的理解会越来越深入,编写代码也会越来越得心应手。
来源:
https://app-acda5zfcddz5.appmiaoda.com