Python编程练习:7个经典题目详解

简介: 本文分享7个实用Python编程练习题,涵盖密码锁模拟、猜数字、ATM系统等经典项目,涉及循环、条件判断、算法设计等核心知识点,适合初学者夯实基础、提升实战能力。

分享7个Python编程练习题,涵盖循环、条件判断、算法等多个方面,适合初学者巩固Python基础。

一、数字密码锁模拟程序

题目描述

模拟一个数字密码锁的工作过程,规则如下:

  1. 初始密码为四位数:1234

  2. 用户有3次输入密码的机会

  3. 每次输入后:

    若密码正确,提示"密码正确,锁已打开"并结束程序

    若密码错误,提示"密码错误,剩余X次机会"

    若输入的不是四位数,提示"请输入四位数密码",不消耗尝试次数

  4. 额外功能:

    连续输错3次后,提示"密码错误次数过多,锁已锁定"

    锁定后询问是否重置(y/n),输入y则重新获得3次机会,输入n则退出程序

Python源代码

# 初始设置

correct_password = "1234"

attempts_left = 3

is_locked = False

print("=== 数字密码锁模拟程序 ===")

print("初始密码为四位数,您有3次尝试机会")

while True:

# 检查是否已锁定

if is\_locked:

    reset\_choice = input("密码错误次数过多,锁已锁定。是否重置?(y/n): ")

    if reset\_choice.lower() == 'y':

        attempts\_left = 3

        is\_locked = False

        print("锁已重置,您有3次新的尝试机会")

        continue

    else:

        print("程序退出")

        break

# 获取用户输入

user\_input = input(f"请输入四位数密码(剩余{attempts\_left}次机会): ")

# 检查输入是否为四位数

if len(user\_input) != 4 or not user\_input.isdigit():

    print("请输入四位数密码")

    continue  # 不消耗尝试次数,重新输入

# 验证密码

if user\_input == correct\_password:

    print("密码正确,锁已打开")

    break  # 密码正确,退出程序

else:

    attempts\_left -= 1  # 减少尝试次数

    if attempts\_left > 0:

        print(f"密码错误,剩余{attempts\_left}次机会")

    else:

        is\_locked = True  # 锁定密码锁

关键知识点:

while循环、输入验证、字符串处理、continue语句

二、猜数字游戏

题目要求

程序随机生成 1-20 的整数作为答案,玩家有 5 次猜测机会,规则如下:

用 for 循环控制 5 次猜测机会,每次输入猜测的数;

若猜对,打印 “恭喜!第 X 次猜对了” 并提前结束游戏;

若猜错,提示 “猜大了” 或 “猜小了”,并显示剩余次数;

5 次都猜错,打印 “游戏结束,正确答案是 XX”。

Python源代码

import random

# 随机生成答案(1-20的整数)

answer = random.randint(1, 20)

print("=== 猜数字游戏 ===")

print("我已经想了一个1-20之间的整数,你有5次机会来猜!")

# 使用for循环控制5次猜测机会

for attempt in range(1, 6):

# 获取玩家猜测

while True:

    try:

        guess = int(input(f"第{attempt}次猜测,请输入1-20之间的整数: "))

        if 1 <= guess <= 20:

            break  # 输入有效,退出内层循环

        else:

            print("请输入1-20之间的整数!")

    except ValueError:

        print("请输入有效的整数!")

# 判断猜测结果

if guess == answer:

    print(f"🎉 恭喜!第{attempt}次猜对了!")

    break  # 猜对了,提前结束游戏

elif guess < answer:

    print(f"猜小了!剩余次数: {5 - attempt}")

else:

    print(f"猜大了!剩余次数: {5 - attempt}")

# 如果是最后一次猜测且猜错了

if attempt == 5 and guess != answer:

    print(f"💔 游戏结束,正确答案是 {answer}。")

关键知识点:

for循环、条件判断、random模块、break语句

三、ATM 机系统模拟程序

题目要求

模拟一个简易 ATM 机操作,功能包括:

登录验证:预设账号("123456")和密码("654321"),允许最多 3 次输入错误,超过则锁定(退出程序);

主菜单:登录后显示 “查询余额、存款、取款、转账、退出” 选项;

核心功能:

存款:输入金额(正整数),余额增加;

取款:输入金额(正整数),需判断是否≤余额,否则提示 “余额不足”;

转账:输入目标账号(非空)和金额(正整数),需判断金额≤余额,转账后余额减少;

查询余额:显示当前余额;

用 while 循环控制主菜单持续运行,输入 “退出” 则结束程序。

解题思路

登录阶段:用 while 循环控制登录次数(最多 3 次),for 循环可辅助计数,if 判断账号密码是否正确,错误次数达 3 次则退出;

初始化账户信息:余额(如 1000 元)、当前账号;

主菜单阶段:用 while True 循环持续显示选项,用户输入选项后,用 if/elif 分支执行对应功能;

各功能逻辑:

存款 / 取款 / 转账:用 if 判断输入金额是否为正整数(简化处理,假设输入合法),取款 / 转账需额外判断金额≤余额;

转账需验证目标账号非空(if target_account.strip() == "");

输入 “退出” 时,用 break 退出主循环,程序结束。

Python源代码

# 预设账户信息

correct_account = "123456"

correct_password = "654321"

balance = 1000 # 初始余额

transaction_history = [] # 交易记录

# 登录验证

print("=== ATM 机系统 ===")

login_attempts = 3

while login_attempts > 0:

account = input("请输入账号: ").strip()

password = input("请输入密码: ").strip()

if account == correct\_account and password == correct\_password:

    print("登录成功!")

    break

else:

    login\_attempts -= 1

    if login\_attempts > 0:

        print(f"账号或密码错误,剩余{login\_attempts}次尝试机会")

    else:

        print("错误次数过多,系统已锁定!")

        exit()

# 主菜单

while True:

print("\\n" + "="\*20)

print("     主菜单")

print("="\*20)

print("1. 查询余额")

print("2. 存款")

print("3. 取款")

print("4. 转账")

print("5. 交易记录")

print("6. 退出")

choice = input("请选择操作 (1-6): ").strip()

if choice == "1":  # 查询余额

    print(f"当前余额: {balance}元")

elif choice == "2":  # 存款

    try:

        amount = int(input("请输入存款金额: "))

        if amount <= 0:

            print("存款金额必须为正整数")

        else:

            balance += amount

            transaction\_history.append(f"存款: +{amount}元")

            print(f"存款成功!当前余额: {balance}元")

    except ValueError:

        print("请输入有效的金额!")

elif choice == "3":  # 取款

    try:

        amount = int(input("请输入取款金额: "))

        if amount <= 0:

            print("取款金额必须为正整数")

        elif amount > balance:

            print("余额不足!")

        else:

            balance -= amount

            transaction\_history.append(f"取款: -{amount}元")

            print(f"取款成功!当前余额: {balance}元")

    except ValueError:

        print("请输入有效的金额!")

elif choice == "4":  # 转账

    target\_account = input("请输入目标账号: ").strip()

    if target\_account == "":

        print("目标账号不能为空!")

    elif target\_account == correct\_account:

        print("不能向自己转账!")

    else:

        try:

            amount = int(input("请输入转账金额: "))

            if amount <= 0:

                print("转账金额必须为正整数")

            elif amount > balance:

                print("余额不足!")

            else:

                # 确认转账

                confirm = input(f"确认向账号 {target\_account} 转账 {amount} 元? (y/n): ").strip().lower()

                if confirm == 'y':

                    balance -= amount

                    transaction\_history.append(f"转账至 {target\_account}: -{amount}元")

                    print(f"转账成功!当前余额: {balance}元")

                else:

                    print("转账已取消")

        except ValueError:

            print("请输入有效的金额!")

elif choice == "5":  # 交易记录

    if not transaction\_history:

        print("暂无交易记录")

    else:

        print("交易记录:")

        for i, record in enumerate(transaction\_history, 1):

            print(f"{i}. {record}")

        print(f"当前余额: {balance}元")

elif choice == "6":  # 退出

    print("感谢使用,再见!")

    break

else:

    print("无效选择,请重新输入!")

关键知识点:

嵌套循环、菜单设计、金额验证、程序流程控制

四、统计1到n之间既是偶数又能被4整除的数

题目:

输入一个正整数 n,使用 while 循环统计 1 到 n 之间(含 n)所有 “既是偶数又能被 4 整除” 的数,并打印:

这些数的总和;

这些数的个数。

示例:输入 n=10,符合条件的数为 4、8,总和 12,个数 2。

Python源代码

# 获取用户输入

n = int(input("请输入一个正整数 n: "))

# 初始化变量

current_num = 4 # 直接从4开始,因为4是最小的符合条件的数

total_sum = 0

count = 0

# 使用 while 循环,每次增加4

while current_num <= n:

total\_sum += current\_num

count += 1

print(f"找到符合条件的数: {current\_num}")

current\_num += 4  # 下一个能被4整除的数

# 输出结果

print(f"\n统计结果:")

print(f"符合条件的数有 {count} 个")

print(f"这些数的总和是 {total_sum}")

关键知识点:

while循环、条件判断、累加计算

五、打印对称数字图案

题目:

输入一个正整数 k(2≤k≤5),使用 嵌套 for 循环 打印对称数字图案,规则:

共 k 行,第 i 行(从 1 开始)打印 i 个数字,数字从 1 递增到 i;

每行数字之间用空格分隔。

示例:输入 k=3,输出:

Python源代码

# 获取用户输入

k = int(input("请输入一个正整数 k (2≤k≤5): "))

# 验证输入范围

if k < 2 or k > 5:

print("k 必须在 2 到 5 之间")

else:

# 使用嵌套 for 循环打印图案

for i in range(1, k+1):  # 控制行数,从1到k

    for j in range(1, i+1):  # 控制每行打印的数字个数

        print(j, end=" ")  # 打印数字,用空格分隔

    print()  # 换行

关键知识点:

嵌套for循环、打印格式控制

六、打印星号菱形图案

题目:

输入一个正整数 k(k 为奇数,3≤k≤7),使用 嵌套 for 循环 打印由星号(*)组成的菱形,菱形的对角线长度为 k。示例:输入 k=5,输出:

Python源代码

# 获取用户输入

k = int(input("请输入一个奇数 k (3≤k≤7): "))

# 验证输入是否为奇数且在范围内

if k < 3 or k > 7 or k % 2 == 0:

print("k 必须是 3 到 7 之间的奇数")

else:

# 打印上半部分(包括中间行)

for i in range(1, k//2 + 2):  # 上半部分行数

    # 打印空格

    for j in range(k//2 - i + 1):

        print(" ", end="")

    # 打印星号

    for j in range(2\*i - 1):

        print("\*", end="")

    print()  # 换行

# 打印下半部分

for i in range(k//2, 0, -1):  # 下半部分行数

    # 打印空格

    for j in range(k//2 - i + 1):

        print(" ", end="")

    # 打印星号

    for j in range(2\*i - 1):

        print("\*", end="")

    print()  # 换行

关键知识点:

数学计算、对称图案打印、循环控制

七、找零钱计算(最少硬币数)

输入商品价格 price(整数,0 < price < 100)和支付金额 payment(整数,payment ≥ price),计算找零金额并使用 最少硬币数 组合(硬币面额:1 元、5 元、10 元、20 元)。示例:找零 36 元,最优组合为 20+10+5+1(共 4 枚)。

Python源代码

# 输入商品价格和支付金额

price = int(input("请输入商品价格 (0 < price < 100): "))

payment = int(input("请输入支付金额 (payment ≥ price): "))

# 计算找零金额

change = payment - price

print(f"找零金额: {change}元")

# 硬币面额(从大到小)

coins = [20, 10, 5, 1]

coin_count = [0, 0, 0, 0] # 对应每种硬币的数量

remaining = change

# 计算每种硬币的数量

for i, coin in enumerate(coins):

coin\_count\[i\] = remaining // coin

remaining %= coin

# 输出结果

coin_names = ["20元", "10元", "5元", "1元"]

combination = []

print("最优硬币组合:")

total_coins = 0

for i in range(4):

if coin\_count\[i\] > 0:

    print(f"{coin\_names\[i\]}硬币: {coin\_count\[i\]}枚")

    total\_coins += coin\_count\[i\]

    # 添加硬币到组合

    for \_ in range(coin\_count\[i\]):

        combination.append(coins\[i\])

# 输出组合和总数

if combination:

combo\_str = "+".join(map(str, combination))

print(f"组合方式: {combo\_str}")

print(f"总共需要 {total\_coins} 枚硬币")

else:

print("无需找零")

关键知识点:

贪心算法、列表操作、整除和取余运算

学习建议

从简单开始:先理解每个题目的基本逻辑,再尝试自己编写代码

多实践:对于每个题目,尝试用不同的方法实现

理解原理:不仅要会写代码,还要理解背后的算法和逻辑

举一反三:基于这些题目,尝试设计类似的练习题目

题目涵盖了Python编程的基础知识点,通过练习可以显著提升编程能力。希望对你学习Python有所帮助!

相关文章
|
11天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
7853 14
|
9天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1710 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
10天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
1542 11
|
6天前
|
人工智能 JavaScript 芯片
DeepSeek 官方偷偷上传 Harness 桌面端安装包,我已经用上了。。附最新下载地址
DeepSeek Harness 官方的桌面端安装包被网友扒出来了,2 分钟讲明白如何使用,体验如何,适合作为 AI 编程工具么?附最新 Windows 和 Mac 双端的下载地址
1486 1
|
8天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
23天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3755 10
|
18天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1910 1