Python 入门:常用数据类型与程序结构详解(二)

Python 入门:常用数据类型与程序结构详解(二)

1. 引言

Python 作为一门简洁、易读且功能强大的编程语言,其核心基础在于对数据类型的理解和程序结构的掌握。无论是进行数据分析、Web 开发还是自动化脚本编写,熟练运用数据类型和控制程序流程都是必备技能。本教程将系统性地介绍 Python 中最常用的几种数据类型,并详细讲解其核心程序结构,辅以丰富的代码示例,帮助初学者快速构建扎实的编程基础。

2. Python 常用数据类型

Python 中的数据类型决定了数据在内存中的存储方式以及可以对其执行的操作。以下是几种最基础且重要的数据类型。

2.1 数字类型 (Numeric Types)

Python 支持整数、浮点数和复数。

# 整数 (int)age=25count=-10binary_num=0b1010# 二进制表示print(f"整数 age:{age}, 类型:{type(age)}")# 浮点数 (float)price=19.99pi=3.1415926scientific=2.5e-3# 科学计数法,表示 0.0025print(f"浮点数 price:{price}, 类型:{type(price)}")# 复数 (complex)complex_num=3+4jprint(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))# 长度: 5print(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**2forxinrange(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])# 访问: 10x,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'# 遍历字典forkey,valueinstudent.items():print(f"{key}:{value}")# 字典推导式square_dict={x:x**2forxinrange(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(2inset_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-elsescore=85ifscore>=90:grade='A'elifscore>=80:grade='B'elifscore>=60:grade='C'else:grade='D'print(f"分数{score}对应的等级是:{grade}")# 嵌套 ifage=25has_permit=Trueifage>=18:ifhas_permit:print("可以驾驶。")else:print("需要考取驾照。")else:print("未成年,不能驾驶。")

3.3 循环结构

用于重复执行某段代码。

3.3.1 for 循环

通常用于遍历序列(如列表、字符串、字典)或已知次数的循环。

# 遍历列表fruits=['apple','banana','cherry']forfruitinfruits:print(f"I like{fruit}")# 使用 range() 函数foriinrange(5):# 0, 1, 2, 3, 4print(i)foriinrange(2,10,2):# 2, 4, 6, 8 (起始,结束(不含),步长)print(i)# 遍历字典person={'name':'Alice','age':25}forkeyinperson:# 遍历键print(key)forvalueinperson.values():# 遍历值print(value)forkey,valueinperson.items():# 遍历键值对print(f"{key}:{value}")
3.3.2 while 循环

在条件为真时重复执行代码块。

# 基础 while 循环count=0whilecount<5:print(f"Count is{count}")count+=1# 重要:必须改变条件,否则会无限循环# 使用 break 和 continuewhileTrue:# 无限循环user_input=input("输入 'quit' 退出: ")ifuser_input=='quit':print("退出循环。")break# 跳出整个循环ifuser_input=='skip':print("跳过本次循环。")continue# 跳过本次循环剩余代码,进入下一次循环print(f"你输入了:{user_input}")

3.4 异常处理结构 (try/except/else/finally)

用于捕获和处理程序运行时可能出现的错误。

# 基本异常处理try:num=int(input("请输入一个整数: "))result=10/numprint(f"10 /{num}={result}")exceptValueError:print("错误:输入的不是有效整数!")exceptZeroDivisionError:print("错误:除数不能为零!")exceptExceptionase:# 捕获所有其他异常print(f"发生未知错误:{e}")else:print("计算成功完成!")# 仅在 try 块无异常时执行finally:print("程序执行结束。")# 无论是否发生异常都会执行

4. 综合示例:学生成绩管理系统 (简易版)

下面我们将数据类型和程序结构结合起来,构建一个简单的命令行学生成绩管理系统。

# 定义一个学生列表,每个学生是一个字典students=[]defadd_student():"""添加学生信息"""name=input("请输入学生姓名: ")try:score=float(input("请输入学生成绩 (0-100): "))ifscore<0orscore>100:print("成绩必须在0-100之间!")returnexceptValueError:print("输入无效,请输入数字!")returnstudent={"name":name,"score":score}students.append(student)print(f"学生{name}添加成功!")defshow_all_students():"""显示所有学生信息"""ifnotstudents:print("暂无学生信息。")returnprint("\n=== 所有学生信息 ===")foridx,stuinenumerate(students,1):grade='A'ifstu['score']>=90else'B'ifstu['score']>=80else'C'ifstu['score']>=60else'D'print(f"{idx}. 姓名:{stu['name']}, 成绩:{stu['score']}, 等级:{grade}")print("===================\n")defcalculate_average():"""计算平均成绩"""ifnotstudents:print("暂无学生信息,无法计算平均分。")returntotal_score=sum(stu['score']forstuinstudents)average=total_score/len(students)print(f"平均成绩为:{average:.2f}")deffind_student_by_name():"""根据姓名查找学生"""name_to_find=input("请输入要查找的学生姓名: ")found_students=[stuforstuinstudentsifstu['name']==name_to_find]iffound_students:print(f"找到{len(found_students)}位名为 '{name_to_find}' 的学生:")forstuinfound_students:print(f" 成绩:{stu['score']}")else:print(f"未找到名为 '{name_to_find}' 的学生。")# 主程序循环defmain():whileTrue:print("\n--- 学生成绩管理系统 ---")print("1. 添加学生")print("2. 显示所有学生")print("3. 计算平均成绩")print("4. 按姓名查找学生")print("5. 退出系统")choice=input("请选择操作 (1-5): ")ifchoice=='1':add_student()elifchoice=='2':show_all_students()elifchoice=='3':calculate_average()elifchoice=='4':find_student_by_name()elifchoice=='5':print("感谢使用,再见!")breakelse:print("无效选择,请重新输入!")# 启动程序if__name__=="__main__":main()

5. 练习题目

请尝试独立完成以下练习,以巩固所学知识。

题目 1:数据类型操作

  1. 创建一个列表numbers,包含 1 到 10 的整数。
  2. 使用列表推导式,生成一个新列表squared,包含numbers中每个元素的平方。
  3. numbers中筛选出所有偶数,存入新列表evens
  4. 创建一个字典student_scores,键为学生姓名(字符串),值为成绩(整数),至少包含3条记录。
  5. 计算student_scores中所有成绩的平均值。

题目 2:程序流程控制

  1. FizzBuzz 问题:编写程序,打印 1 到 100 的数字。但对于 3 的倍数,打印 “Fizz” 代替数字;对于 5 的倍数,打印 “Buzz”;对于同时是 3 和 5 的倍数,打印 “FizzBuzz”。
  2. 素数判断:编写一个函数is_prime(n),判断输入的正整数n是否为素数(质数)。在函数中使用循环。
  3. 简单计算器:编写一个程序,让用户输入两个数字和一个运算符(+, -, *, /),根据运算符输出计算结果。使用if-elif-else结构判断运算符,并处理除零错误。

题目 3:综合应用

仿照第 4 节的“学生成绩管理系统”,尝试为其增加以下功能:

  1. 删除学生:根据学生姓名删除对应的记录。
  2. 成绩排序:实现按成绩从高到低显示所有学生信息的功能。
  3. 数据持久化(进阶):尝试使用json模块,将students列表保存到文件students.json中,并在程序启动时从文件加载数据。

提示:完成练习时,多使用print()函数输出中间结果,帮助调试和理解程序流程。遇到问题,可以回顾教程中的相关示例。