1. 引言
Python 作为一门简洁、易读且功能强大的编程语言,其核心基础在于对数据类型的理解和程序结构的掌握。无论是进行数据分析、Web 开发还是自动化脚本编写,熟练运用数据类型和控制程序流程都是必备技能。本教程将系统性地介绍 Python 中最常用的几种数据类型,并详细讲解其核心程序结构,辅以丰富的代码示例,帮助初学者快速构建扎实的编程基础。
2. Python 常用数据类型
Python 中的数据类型决定了数据在内存中的存储方式以及可以对其执行的操作。以下是几种最基础且重要的数据类型。
2.1 数字类型 (Numeric Types)
Python 支持整数、浮点数和复数。
# 整数 (int)
age = 25
count = -10
binary_num = 0b1010 # 二进制表示
print(f"整数 age: {age}, 类型: {type(age)}")
# 浮点数 (float)
price = 19.99
pi = 3.1415926
scientific = 2.5e-3 # 科学计数法,表示 0.0025
print(f"浮点数 price: {price}, 类型: {type(price)}")
# 复数 (complex)
complex_num = 3 + 4j
print(f"复数: {complex_num}, 实部: {complex_num.real}, 虚部: {complex_num.imag}")
2.2 字符串 (String)
字符串用于表示文本信息,由单引号 '、双引号 " 或三引号 '''/""" 包裹。
# 字符串定义
name = "Alice"
greeting = 'Hello, World!'
multiline_str = """这是一个
多行
字符串。"""
# 字符串操作
print(name[0]) # 索引: 'A'
print(greeting[7:12]) # 切片: 'World'
print(len(name)) # 长度: 5
print(name.upper()) # 转为大写: 'ALICE'
print("Hello, " + name) # 拼接: 'Hello, Alice'
print(f"Hello, {name}") # f-string 格式化 (推荐)
2.3 列表 (List)
列表是一个有序、可变的集合,可以包含不同类型的元素。
# 列表定义
fruits = ['apple', 'banana', 'cherry']
mixed_list = [1, 'hello', 3.14, True]
# 列表操作
fruits.append('orange') # 追加元素
fruits.insert(1, 'blueberry') # 在索引1处插入
print(fruits[2]) # 访问: 'cherry'
fruits[0] = 'avocado' # 修改元素
popped = fruits.pop() # 移除并返回最后一个元素
print(f"列表长度: {len(fruits)}")
print(f"切片: {fruits[1:3]}") # 获取子列表
# 列表推导式 (强大特性)
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
2.4 元组 (Tuple)
元组与列表类似,但它是不可变的。通常用于存储不应被修改的数据集合。
# 元组定义
coordinates = (10, 20)
rgb_color = (255, 0, 0)
single_element_tuple = (42,) # 注意逗号,与 (42) 区分
# 元组操作
print(coordinates[0]) # 访问: 10
x, y = coordinates # 解包
print(f"元组长度: {len(rgb_color)}")
# 元组不可变,以下操作会报错
# coordinates[0] = 100 # TypeError
2.5 字典 (Dictionary)
字典是一种键值对映射的无序集合,键必须是不可变类型(如字符串、数字、元组)。
# 字典定义
student = {
"name": "Bob",
"age": 20,
"courses": ["Math", "Physics"]
}
# 字典操作
print(student["name"]) # 访问: 'Bob'
student["grade"] = "A" # 添加/修改键值对
print(student.get("hobby", "N/A")) # 安全获取,键不存在返回默认值'N/A'
# 遍历字典
for key, value in student.items():
print(f"{key}: {value}")
# 字典推导式
square_dict = {x: x**2 for x in range(5)} # {0:0, 1:1, 2:4, 3:9, 4:16}
2.6 集合 (Set)
集合是一个无序、不重复元素的集合,主要用于成员关系测试和消除重复元素。
# 集合定义
unique_numbers = {1, 2, 3, 3, 4, 4} # 自动去重: {1, 2, 3, 4}
empty_set = set() # 注意:不能用 {} 创建空集合,{} 是空字典
# 集合操作
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}
print(set_a | set_b) # 并集: {1, 2, 3, 4, 5, 6}
print(set_a & set_b) # 交集: {3, 4}
print(set_a - set_b) # 差集 (在a中但不在b中): {1, 2}
print(2 in set_a) # 成员测试: True
3. Python 常见程序结构
程序结构控制着代码的执行流程,是构建逻辑的骨架。
3.1 顺序结构
代码默认从上到下,逐行顺序执行。
# 顺序结构示例
print("第一步:准备数据")
data = [1, 2, 3]
print("第二步:处理数据")
total = sum(data)
print("第三步:输出结果")
print(f"总和是: {total}")
3.2 条件分支结构 (if/elif/else)
根据条件判断决定执行哪部分代码。
# 简单的 if-else
score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 60:
grade = 'C'
else:
grade = 'D'
print(f"分数 {score} 对应的等级是: {grade}")
# 嵌套 if
age = 25
has_permit = True
if age >= 18:
if has_permit:
print("可以驾驶。")
else:
print("需要考取驾照。")
else:
print("未成年,不能驾驶。")
3.3 循环结构
用于重复执行某段代码。
3.3.1 for 循环
通常用于遍历序列(如列表、字符串、字典)或已知次数的循环。
# 遍历列表
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(f"I like {fruit}")
# 使用 range() 函数
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 10, 2): # 2, 4, 6, 8 (起始,结束(不含),步长)
print(i)
# 遍历字典
person = {'name': 'Alice', 'age': 25}
for key in person: # 遍历键
print(key)
for value in person.values(): # 遍历值
print(value)
for key, value in person.items(): # 遍历键值对
print(f"{key}: {value}")
3.3.2 while 循环
在条件为真时重复执行代码块。
# 基础 while 循环
count = 0
while count < 5:
print(f"Count is {count}")
count += 1 # 重要:必须改变条件,否则会无限循环
# 使用 break 和 continue
while True: # 无限循环
user_input = input("输入 'quit' 退出: ")
if user_input == 'quit':
print("退出循环。")
break # 跳出整个循环
if user_input == 'skip':
print("跳过本次循环。")
continue # 跳过本次循环剩余代码,进入下一次循环
print(f"你输入了: {user_input}")
3.4 异常处理结构 (try/except/else/finally)
用于捕获和处理程序运行时可能出现的错误。
# 基本异常处理
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print(f"10 / {num} = {result}")
except ValueError:
print("错误:输入的不是有效整数!")
except ZeroDivisionError:
print("错误:除数不能为零!")
except Exception as e: # 捕获所有其他异常
print(f"发生未知错误: {e}")
else:
print("计算成功完成!") # 仅在 try 块无异常时执行
finally:
print("程序执行结束。") # 无论是否发生异常都会执行
4. 综合示例:学生成绩管理系统 (简易版)
下面我们将数据类型和程序结构结合起来,构建一个简单的命令行学生成绩管理系统。
# 定义一个学生列表,每个学生是一个字典
students = []
def add_student():
"""添加学生信息"""
name = input("请输入学生姓名: ")
try:
score = float(input("请输入学生成绩 (0-100): "))
if score < 0 or score > 100:
print("成绩必须在0-100之间!")
return
except ValueError:
print("输入无效,请输入数字!")
return
student = {"name": name, "score": score}
students.append(student)
print(f"学生 {name} 添加成功!")
def show_all_students():
"""显示所有学生信息"""
if not students:
print("暂无学生信息。")
return
print("\n=== 所有学生信息 ===")
for idx, stu in enumerate(students, 1):
grade = 'A' if stu['score'] >= 90 else 'B' if stu['score'] >= 80 else 'C' if stu['score'] >= 60 else 'D'
print(f"{idx}. 姓名: {stu['name']}, 成绩: {stu['score']}, 等级: {grade}")
print("===================\n")
def calculate_average():
"""计算平均成绩"""
if not students:
print("暂无学生信息,无法计算平均分。")
return
total_score = sum(stu['score'] for stu in students)
average = total_score / len(students)
print(f"平均成绩为: {average:.2f}")
def find_student_by_name():
"""根据姓名查找学生"""
name_to_find = input("请输入要查找的学生姓名: ")
found_students = [stu for stu in students if stu['name'] == name_to_find]
if found_students:
print(f"找到 {len(found_students)} 位名为 '{name_to_find}' 的学生:")
for stu in found_students:
print(f" 成绩: {stu['score']}")
else:
print(f"未找到名为 '{name_to_find}' 的学生。")
# 主程序循环
def main():
while True:
print("\n--- 学生成绩管理系统 ---")
print("1. 添加学生")
print("2. 显示所有学生")
print("3. 计算平均成绩")
print("4. 按姓名查找学生")
print("5. 退出系统")
choice = input("请选择操作 (1-5): ")
if choice == '1':
add_student()
elif choice == '2':
show_all_students()
elif choice == '3':
calculate_average()
elif choice == '4':
find_student_by_name()
elif choice == '5':
print("感谢使用,再见!")
break
else:
print("无效选择,请重新输入!")
# 启动程序
if __name__ == "__main__":
main()
5. 练习题目
请尝试独立完成以下练习,以巩固所学知识。
题目 1:数据类型操作
- 创建一个列表
numbers,包含 1 到 10 的整数。 - 使用列表推导式,生成一个新列表
squared,包含numbers中每个元素的平方。 - 从
numbers中筛选出所有偶数,存入新列表evens。 - 创建一个字典
student_scores,键为学生姓名(字符串),值为成绩(整数),至少包含3条记录。 - 计算
student_scores中所有成绩的平均值。
题目 2:程序流程控制
- FizzBuzz 问题:编写程序,打印 1 到 100 的数字。但对于 3 的倍数,打印 “Fizz” 代替数字;对于 5 的倍数,打印 “Buzz”;对于同时是 3 和 5 的倍数,打印 “FizzBuzz”。
- 素数判断:编写一个函数
is_prime(n),判断输入的正整数n是否为素数(质数)。在函数中使用循环。 - 简单计算器:编写一个程序,让用户输入两个数字和一个运算符(+, -, *, /),根据运算符输出计算结果。使用
if-elif-else结构判断运算符,并处理除零错误。
题目 3:综合应用
仿照第 4 节的“学生成绩管理系统”,尝试为其增加以下功能:
- 删除学生:根据学生姓名删除对应的记录。
- 成绩排序:实现按成绩从高到低显示所有学生信息的功能。
- 数据持久化(进阶):尝试使用
json模块,将students列表保存到文件students.json中,并在程序启动时从文件加载数据。
提示:完成练习时,多使用 print() 函数输出中间结果,帮助调试和理解程序流程。遇到问题,可以回顾教程中的相关示例。
&spm=1001.2101.3001.5002&articleId=162462210&d=1&t=3&u=33051bc40a5441fc93d544ed7f749cd8)
1074

被折叠的 条评论
为什么被折叠?



