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

📅 2026/7/1 3:22:12
Python 入门:常用数据类型与程序结构详解(二)
1. 引言Python 作为一门简洁、易读且功能强大的编程语言其核心基础在于对数据类型的理解和程序结构的掌握。无论是进行数据分析、Web 开发还是自动化脚本编写熟练运用数据类型和控制程序流程都是必备技能。本教程将系统性地介绍 Python 中最常用的几种数据类型并详细讲解其核心程序结构辅以丰富的代码示例帮助初学者快速构建扎实的编程基础。2. Python 常用数据类型Python 中的数据类型决定了数据在内存中的存储方式以及可以对其执行的操作。以下是几种最基础且重要的数据类型。2.1 数字类型 (Numeric Types)Python 支持整数、浮点数和复数。# 整数 (int)age25count-10binary_num0b1010# 二进制表示print(f整数 age:{age}, 类型:{type(age)})# 浮点数 (float)price19.99pi3.1415926scientific2.5e-3# 科学计数法表示 0.0025print(f浮点数 price:{price}, 类型:{type(price)})# 复数 (complex)complex_num34jprint(f复数:{complex_num}, 实部:{complex_num.real}, 虚部:{complex_num.imag})2.2 字符串 (String)字符串用于表示文本信息由单引号、双引号或三引号/包裹。# 字符串定义nameAlicegreetingHello, World!multiline_str这是一个 多行 字符串。# 字符串操作print(name[0])# 索引: Aprint(greeting[7:12])# 切片: Worldprint(len(name))# 长度: 5print(name.upper())# 转为大写: ALICEprint(Hello, name)# 拼接: Hello, Aliceprint(fHello,{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])# 访问: cherryfruits[0]avocado# 修改元素poppedfruits.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,ycoordinates# 解包print(f元组长度:{len(rgb_color)})# 元组不可变以下操作会报错# coordinates[0] 100 # TypeError2.5 字典 (Dictionary)字典是一种键值对映射的无序集合键必须是不可变类型如字符串、数字、元组。# 字典定义student{name:Bob,age:20,courses:[Math,Physics]}# 字典操作print(student[name])# 访问: Bobstudent[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_setset()# 注意不能用 {} 创建空集合{} 是空字典# 集合操作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_aset_b)# 交集: {3, 4}print(set_a-set_b)# 差集 (在a中但不在b中): {1, 2}print(2inset_a)# 成员测试: True3. Python 常见程序结构程序结构控制着代码的执行流程是构建逻辑的骨架。3.1 顺序结构代码默认从上到下逐行顺序执行。# 顺序结构示例print(第一步准备数据)data[1,2,3]print(第二步处理数据)totalsum(data)print(第三步输出结果)print(f总和是:{total})3.2 条件分支结构 (if/elif/else)根据条件判断决定执行哪部分代码。# 简单的 if-elsescore85ifscore90:gradeAelifscore80:gradeBelifscore60:gradeCelse:gradeDprint(f分数{score}对应的等级是:{grade})# 嵌套 ifage25has_permitTrueifage18:ifhas_permit:print(可以驾驶。)else:print(需要考取驾照。)else:print(未成年不能驾驶。)3.3 循环结构用于重复执行某段代码。3.3.1 for 循环通常用于遍历序列如列表、字符串、字典或已知次数的循环。# 遍历列表fruits[apple,banana,cherry]forfruitinfruits:print(fI 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 循环count0whilecount5:print(fCount is{count})count1# 重要必须改变条件否则会无限循环# 使用 break 和 continuewhileTrue:# 无限循环user_inputinput(输入 quit 退出: )ifuser_inputquit:print(退出循环。)break# 跳出整个循环ifuser_inputskip:print(跳过本次循环。)continue# 跳过本次循环剩余代码进入下一次循环print(f你输入了:{user_input})3.4 异常处理结构 (try/except/else/finally)用于捕获和处理程序运行时可能出现的错误。# 基本异常处理try:numint(input(请输入一个整数: ))result10/numprint(f10 /{num}{result})exceptValueError:print(错误输入的不是有效整数)exceptZeroDivisionError:print(错误除数不能为零)exceptExceptionase:# 捕获所有其他异常print(f发生未知错误:{e})else:print(计算成功完成)# 仅在 try 块无异常时执行finally:print(程序执行结束。)# 无论是否发生异常都会执行4. 综合示例学生成绩管理系统 (简易版)下面我们将数据类型和程序结构结合起来构建一个简单的命令行学生成绩管理系统。# 定义一个学生列表每个学生是一个字典students[]defadd_student():添加学生信息nameinput(请输入学生姓名: )try:scorefloat(input(请输入学生成绩 (0-100): ))ifscore0orscore100: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):gradeAifstu[score]90elseBifstu[score]80elseCifstu[score]60elseDprint(f{idx}. 姓名:{stu[name]}, 成绩:{stu[score]}, 等级:{grade})print(\n)defcalculate_average():计算平均成绩ifnotstudents:print(暂无学生信息无法计算平均分。)returntotal_scoresum(stu[score]forstuinstudents)averagetotal_score/len(students)print(f平均成绩为:{average:.2f})deffind_student_by_name():根据姓名查找学生name_to_findinput(请输入要查找的学生姓名: )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. 退出系统)choiceinput(请选择操作 (1-5): )ifchoice1:add_student()elifchoice2:show_all_students()elifchoice3:calculate_average()elifchoice4:find_student_by_name()elifchoice5:print(感谢使用再见)breakelse: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()函数输出中间结果帮助调试和理解程序流程。遇到问题可以回顾教程中的相关示例。