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

posted @ 2025-10-12 15:56  yxysuanfa  阅读(20)  评论(0)    收藏  举报