当前位置: 首页 > news >正文

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

  分享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有所帮助!

http://www.dtcms.com/a/414768.html

相关文章:

  • JCR分区,中科院分区,CCF分区的含义与区别
  • 二型最大似然(Type II Maximum Likelihood):概述与核心概念
  • 娄底网站建设开发自媒体素材视频网站
  • 云浮源峰网站建设工作室地址门户网站建设相关需求
  • 鸿蒙父组件处理子组件的点击事件
  • DDPM原理解析
  • 白盒密码:守护不可信环境中的密钥安全
  • 创建一个网站买卖WordPress外链方法
  • 使用 Go SDK 玩转 Docker:从容器到多架构构建
  • 原生微信小程序开发基础知识总结架构逻辑
  • 树莓派实现的自动垃圾(纸团)回收机器人
  • 【ROS2学习笔记】节点篇:节点概述
  • Java面试宝典:网络协议与Netty二
  • 自然语言处理(01)
  • 如何利用模板 + 继承的方式,形成动态多态的效果呢?
  • UE_ContrlRig
  • 江苏省城乡住房建设厅网站网站建设及维护流程图
  • ubuntu18.04安装五笔字型的方法
  • 上市公司网站建设要求成都丁香人才网官网专区
  • AI 原生应用:内容创作从 “手工作坊” 到 “智能工厂” 的革命
  • AIGC实战——交互式生成对抗网络(iGAN)
  • Scikit-learn Python机器学习 - 聚类分析算法 - DBSCAN(基于密度的噪声应用空间聚类)
  • PyTorch 实战:CIFAR-10 图像分类与网络优化
  • STM32H743-ARM例程10-WWDG
  • STM32H743-ARM例程9-IWDG看门狗
  • 什么是 mmdet3d
  • 建设银行嘉兴分行网站首页胶州网站建设dch100
  • Metal - 9. 深入剖析 3D 场景
  • 3DVG的当前面临的挑战和问题
  • 无代码企业网站开发网站建设管理和维护