【Python循环与字典:高效解决数据处理难题】

循环和数据分析------高效解决问题

学习目标

  1. 循环语句和案例
  2. 高级数据结构字典
  3. 用户管理系统案例
  4. 数据分析助手案例

循环语句

循环用于重复地执行代码块,Python 主要有 for 循环、while 循环两种。

for 循环更易用、出错少;while 循环灵活性更高。

一、for 循环

基础格式

python 复制代码
for 变量 in 集合:
    代码块
  • 集合:列表、元组、字典等可迭代对象;
  • 常配合 range() 函数生成数字序列遍历。

range() 函数

语法:range(start, stop[, step])

  • start:起始值,默认 0
  • stop:终止边界(循环到 stop-1 停止,不可省略);
  • step:步长,默认 1

range 示例代码

python 复制代码
# 0~9
for i in range(10):
    print(i, "", end="")
print("\n")

# 5~9
for i in range(5,10):
    print(i, "", end="")
print("\n")

# 1~10
for i in range(1,11):
    print(i, "", end="")
print("\n")

# 输出1~10
for i in range(10):
    print(i+1, "", end="")
print("\n")

# 倒序10~1 两种写法
for i in range(10,0,-1):
    print(i, "", end="")
print("\n")

for i in range(10):
    print(10-i, "", end="")

循环搭配 else 语句

规则:

  1. for 遍历完全部元素 / while 条件为假正常结束 → 执行 else
  2. 循环被 break 提前终止 → 不执行 else
质数判断示例
python 复制代码
for n in range(2,10):
    for x in range(2,n):
        if n % x == 0:
            print(n,'等于',x,'*',n//x)
            break
    else:
        # 内层循环未触发break,说明是质数
        print(n,'是质数')

输出:

复制代码
2 是质数
3 是质数
4 等于 2 * 2
5 是质数
6 等于 2 * 3
7 是质数
8 等于 2 * 4
9 等于 3 * 3

for 循环实战案例

案例1:遍历列表筛选偶数
python 复制代码
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = []
for num in numbers:
    if num % 2 == 0:
        even_numbers.append(num)
print("偶数列表:", even_numbers)
案例2:输出100以内偶数,每5个换行
python 复制代码
count = 0
for i in range(101):
    if i % 2 == 0:
        count += 1
        if count % 5 == 0:
            print(i)
        else:
            print(i, end=' ')
案例3:学生姓名列表操作

需求:

A. 遍历打印所有学生姓名

B. for 循环查找指定学生是否存在

二、while 循环

基础格式

python 复制代码
while 条件表达式:
    语句序列

逻辑:条件为真则执行循环体,条件为假退出循环。

while 求和示例(1~100累加)

python 复制代码
i = 1
sum = 0
while i <= 100:
    sum += i
    i = i + 1
print("sum=", sum) # 输出 5050

while 实战:猜数字游戏

需求:

  • 随机数范围 [0,100]
  • 用户共3次猜测机会;
  • 每次提示猜大/猜小,更新区间 [min,max]
  • 猜对直接胜利,3次用完电脑胜利。
python 复制代码
# 猜数字游戏
# 1. 电脑随机一个数
num = random.randint(0, 100)
# 2. 写个循环
i = 0
min=0
max=100
while i < 3:
    #用户猜数字
    n=int(input("请用户猜一个0-100的数:"))
    # 3. 比较数字,做相应的处理
    if num==n:
        print("恭喜你猜对了!")
        break
    elif n>num:
        max=n-1
        print(f"猜大了,数字范围在[{min},{max}]之间")
    else:#猜小了
        min=n+1
        print(f"猜大了,数字范围在[{min},{max}]之间")
    i+=1
if i==3:
    print(f"电脑赢了!电脑出的数字是{num}")

三、嵌套循环

循环内部再写循环,经典案例:九九乘法表

python 复制代码
for i in range(1,10):
    for j in range(1,i+1):
        d = i * j
        print('%d*%d=%-2d'%(i,j,d),end=' ')
    print() # 换行

输出片段:

复制代码
1*1=1  
2*1=2 2*2=4  
3*1=3 3*2=6 3*3=9  
...

四、跳转语句 break / continue

break 语句

终止整个循环 ,跳出循环体,执行循环后代码。

示例1:遍历字符串遇到b停止

python 复制代码
for letter in 'Runoob':
    if letter == 'b':
        break
    print('当前字母为:', letter)

示例2:while循环到5退出

python 复制代码
var = 10
while var > 0:
    print('当前变量值为:', var)
    var = var - 1
    if var == 5:
        break
print("Good bye!")

continue 语句

仅跳过本次循环剩余代码 ,直接进入下一轮条件判断,不终止整体循环。

示例1:跳过字母o不打印

python 复制代码
for letter in 'Runoob':
    if letter == 'o':
        continue
    print('当前字母:', letter)

示例2:变量等于5时跳过输出

python 复制代码
var = 10
while var > 0:
    var = var - 1
    if var == 5:
        continue
    print('当前变量值:', var)
print ("Good bye!")

break 与 continue 区别

  • break:彻底结束整个循环,不再判断条件;
  • continue:只跳过当前这一次迭代,继续下一轮循环判断。

高级数据结构------字典 dict

字典基础定义

  1. 无序、可变序列;
  2. 格式:{key1:value1, key2:value2}
  3. 键(key):不可变类型(数字、字符串、元组),唯一不可重复
  4. 值(value):任意类型,可重复。
python 复制代码
d = {key1 : value1, key2 : value2 }
dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }

字典访问

通过 字典[键] 获取对应值:

python 复制代码
dict = {'Name':'Runoob','Age':7,'Class':'First'}
print ("dict['Name']:",dict['Name'])
print ("dict['Age']:",dict['Age'])

访问不存在的键会抛出 KeyError 异常。

修改与删除字典

新增/修改键值

python 复制代码
dict={'Name':'Runoob','Age':7,'Class':'First'}
dict['Age']=8          # 修改已有键
dict['School']="菜鸟教程" # 新增键值对

删除操作

python 复制代码
del dict['Name']  # 删除单个键值
dict.clear()       # 清空字典所有内容
del dict           # 彻底删除字典对象

字典三种遍历方式

示例数据:

python 复制代码
student_scores = {
    "Alice": 85,
    "Bob": 92,
    "Charlie":78
}
  1. 遍历所有键(两种等价写法)
python 复制代码
# 写法1
for name in student_scores.keys():
    print(f"姓名:{name}")
# 写法2(默认遍历键)
for name in student_scores:
    print(f"姓名:{name}")
  1. 遍历所有值
python 复制代码
for score in student_scores.values():
    print(f"成绩:{score}")
  1. 同时遍历键+值(items)
python 复制代码
for name, score in student_scores.items():
    print(f"{name}的成绩是{score}")

字典方法总结

方法 作用
.keys() 获取字典所有键
.values() 获取字典所有值
.items() 获取所有(键,值)元组对
直接 for i in dict 默认遍历键,等价 .keys()

用户管理系统综合案例

功能需求

  1. 用户注册:检测用户名是否重复;
  2. 用户登录:区分普通用户 / 管理员;
  3. 查看信息
    • 普通用户:仅查看自身信息;
    • 管理员:查看全部 / 指定用户;
  4. 修改信息
    • 普通用户:仅修改自身;
    • 管理员:修改任意用户;
  5. 删除用户 :仅管理员可用,禁止删除 admin 账号。

系统交互演示

复制代码
=====主菜单=====
1.注册
2.登录
3.退出
请选择操作:1
请输入用户名(输入q返回):LiLi
请输入密码:123
请输入邮箱:123@qq.com
用户lili注册成功!

=====主菜单=====
1.注册
2.登录
3.退出
请选择操作:2
请输入用户名:lili
请输入密码:123
欢迎回来,lili!

=====用户菜单
当前用户:lili(普通用户)
1.查看用户信息
2.修改用户信息
4.退出登录
请选择操作:1
用户名:lili
邮箱:123@qq.com
角色:普通用户
python 复制代码
users=[
    {'name':"lili",'password':"123456",'role':"普通用户"},
    {'name':"admin",'password':"admin",'role':"管理员"}
]

while True:
    menu="""
********欢迎使用用户管理系统********
1. 登录
2. 注册
3. 退出
"""
    choose = input(menu)
    # 判断是不是数字
    if not choose.isdigit():
        print("请输入数字!")
        continue
    choose=int(choose)

    if choose==1:
        # 用户输入用户名和密码
        name=input("请输入用户名:")
        pwd=input("请输入密码:")
        login_user = None
        for user in users:
            if name==user['name'] and pwd==user['password']:
                login_user = user
                break
        if login_user is None:
            print("登录失败,用户名或密码错误!")
            continue

        print("登录成功!")
        # 登录成功后子菜单循环
        while True:
            if login_user['role']=="管理员":
                menu1="""
                ********管理员界面********
                1. 查看用户信息
                2. 修改用户信息
                3. 删除用户信息
                4. 返回上一级
                请输入你的选择:"""
                c_input=input(menu1)
                if not c_input.isdigit():
                    print("请输入数字选项!")
                    continue
                c = int(c_input)
                if c ==1:
                    #查看全部用户
                    print("-----全部用户列表-----")
                    for u in users:
                        print(f"用户名:{u['name']},密码:{u['password']},角色:{u['role']}")
                elif c ==2:
                    old_name = input("输入要修改的用户名:")
                    find = False
                    for u in users:
                        if u["name"] == old_name:
                            find=True
                            new_pwd = input("输入新密码:")
                            new_role = input("输入新角色:")
                            u["password"] = new_pwd
                            u["role"] = new_role
                            print("修改完成!")
                            break
                    if not find:
                        print("该用户不存在")
                elif c ==3:
                    del_name = input("输入要删除的用户名:")
                    find=False
                    for idx,u in enumerate(users):
                        if u["name"] == del_name:
                            del users[idx]
                            find=True
                            print("删除成功!")
                            break
                    if not find:
                        print("该用户不存在")
                elif c ==4:
                    break
                else:
                    print("选项无效!")

            elif login_user['role']=="普通用户":
                menu2="""
                ********用户界面********
                1. 查看用户信息
                2. 修改用户信息
                3. 返回上一级
                请输入你的选择:"""
                c_input=input(menu2)
                if not c_input.isdigit():
                    print("请输入数字选项!")
                    continue
                c=int(c_input)
                if c == 1:
                    #只能看自己
                    print(f"你的信息:用户名:{login_user['name']},密码:{login_user['password']},角色:{login_user['role']}")
                elif c ==2:
                    new_pwd = input("请输入你的新密码:")
                    login_user["password"] = new_pwd
                    print("密码修改成功!")
                elif c ==3:
                    break
                else:
                    print("无效选项")

    elif choose==2:
        # 注册,增加用户名重复校验
        name=input("请输入用户名:")
        # 判断用户名是否已经存在
        exist = False
        for u in users:
            if u["name"] == name:
                exist=True
                break
        if exist:
            print("用户名已经存在,注册失败!")
            continue

        pwd=input("请输入密码:")
        repwd=input("请再次确认密码:")
        role=input("请输入角色(普通用户/管理员):")
        if pwd!=repwd:
            print("两次密码输入不正确,注册失败!")
        else:
            newUser={'name':name,'password':pwd,'role':role}
            users.append(newUser)
            print("注册成功!")

    elif choose==3:
        print("程序退出")
        break
    else:
        print("输入选项不正确,请重新输入!")

数据分析助手案例

功能需求

  1. 数据加载:通过 pandas 读取 CSV 成绩文件;
  2. 总平均分:全部学生全部科目综合平均分;
  3. 各科平均分:数学、语文、英语单科平均分;
  4. 分数段统计:统计各分数段人数分布(60以下 / 60-79 / 80-89 / 90-100)。

样例成绩表

学生ID 姓名 数学 语文 英语
1 张三 85 88 90
2 李四 72 76 85
3 王五 78 90 70
4 赵六 65 70 60
5 钱七 88 82 88
6 孙八 45 65 95
7 周九 82 78 78
8 吴十 76 80 82
9 郑十一 90 77 85
10 王十二 82 83 76

输出样例

各科平均分

科目 平均分
数学 79.6
语文 80.8
英语 80.9

总平均分:80.43(保留两位小数)

分数段人数分布

分数段 数学 语文 英语
60分以下 1 0 1
60-79分 3 5 3
80-89分 4 4 5
90-100分 2 1 1

Pandas 库介绍

简介

Python 核心数据分析库,处理表格、时间序列、矩阵类结构化数据,类似 Excel / SQL 表。

安装命令

bash 复制代码
# 基础安装
pip install pandas
# 清华镜像加速安装
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

查看已安装包:pip list

Pandas 两大核心数据结构

结构 说明
Series 带标签一维同构数组
DataFrame 带标签二维异构表格(最常用,对应Excel表格)

DataFrame 基础创建示例

python 复制代码
import pandas as pd
d = {
    'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
    'two': pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
}
df = pd.DataFrame(d)
print(df)

数据分析参考代码

方式1:基础求和计算平均分

python 复制代码
import pandas as pd
# 读取csv表格数据
df = pd.read_csv('students.csv')
math = df['数学'].to_list()
chinese = df['语文'].to_list()
english = df['英语'].to_list()

total_math = sum(math)
total_chinese = sum(chinese)
total_english = sum(english)
stu_count = len(english)

avg_math = total_math / stu_count
avg_chinese = total_chinese / stu_count
avg_english = total_english / stu_count

print(f"语文平均成绩:{avg_chinese:.1f},数学平均成绩:{avg_math:.1f},英语平均成绩:{avg_english:.1f}")

方式2:pandas内置方法

python 复制代码
import pandas as pd
df = pd.read_csv('students.csv')
# 定义分数段区间与标签
bins = [0, 60, 80, 90, 101]
labels = ['60分以下','60-79分','80-89分','90-100分']

score_avg = {}
score_distribution = {}
# 获取所有科目列(跳过姓名/ID列)
score_columns = df.columns[2:]

for subject in score_columns:
    # 单科平均分
    score_avg[subject] = df[subject].mean()
    # 分数段统计
    score_distribution[subject] = pd.cut(df[subject], bins=bins, labels=labels).value_counts()

# 输出单科平均分
print(score_avg)
# 计算三科总平均分
avg_all = (score_avg['数学'] + score_avg['语文'] + score_avg['英语']) / 3
print(f"总平均分:{avg_all:.2f}")
# 分数段分布转表格输出
score_distribution_df = pd.DataFrame(score_distribution)
print(score_distribution_df)
相关推荐
用户83562907805113 分钟前
使用 Python 管理 PDF 属性和元数据
后端·python
猎嘤一号36 分钟前
【2026 最新】Windows 11 右键菜单还原为 Windows 10 经典样式:一条命令、原理、回退与新版说明
windows·python
用户8356290780511 小时前
使用 Python 在 Word 文档中创建自定义图表
后端·python
kyrie_sakura2 小时前
python学习笔记11 -- 进程和线程
笔记·python·学习
Jialu.2 小时前
中文 NLP 模型部署实战:FastAPI 接口 + Streamlit 看板
人工智能·python·自然语言处理·fastapi
Asum1ta3 小时前
K8s 学习环境搭建:Python 与 PyCharm 开发环境配置指南
python·学习·kubernetes
知识汲取者3 小时前
FastAPI 学习教程(写给想学 FastAPI 的 Java 工程师的)
python·学习·fastapi
飞Link4 小时前
动作方法中的分割与过度分割方法全解析(含代码实战与踩坑案例)
人工智能·python·算法·计算机视觉
小鹿的周先生4 小时前
第四章-SpringAI-函数调用&ToolCalling
开发语言·人工智能·python