本文目录导读:
这里提供几个不同难度的Python编程练习题案例,从基础语法到简单算法都有覆盖,每个案例都附有题目描述和解题思路。
基础入门级
猜数字游戏程序随机生成一个1-100之间的整数,用户输入猜测的数字,程序提示“大了”、“小了”或“猜对了”,记录用户猜的次数。
import random
def guess_number():
target = random.randint(1, 100)
count = 0
while True:
try:
guess = int(input("请输入你猜的数字(1-100):"))
count += 1
if guess < target:
print("小了,再大一点")
elif guess > target:
print("大了,再小一点")
else:
print(f"恭喜你猜对了!答案是{target}")
print(f"你一共猜了{count}次")
break
except ValueError:
print("请输入有效的整数")
guess_number()
学生成绩管理系统定义一个学生类,包含姓名、学号、成绩属性,实现添加学生、显示所有学生、按成绩排序的功能。
class Student:
def __init__(self, name, student_id, score):
self.name = name
self.student_id = student_id
self.score = score
def __str__(self):
return f"姓名:{self.name},学号:{self.student_id},成绩:{self.score}"
class StudentManager:
def __init__(self):
self.students = []
def add_student(self):
name = input("请输入学生姓名:")
student_id = input("请输入学号:")
score = float(input("请输入成绩:"))
self.students.append(Student(name, student_id, score))
def show_students(self):
if not self.students:
print("暂无学生信息")
return
print("所有学生信息:")
for student in self.students:
print(student)
def sort_by_score(self):
self.students.sort(key=lambda x: x.score, reverse=True)
print("按成绩排序后:")
self.show_students()
# 使用示例
manager = StudentManager()
while True:
print("\n1. 添加学生")
print("2. 显示所有学生")
print("3. 按成绩排序")
print("4. 退出")
choice = input("请选择操作:")
if choice == '1':
manager.add_student()
elif choice == '2':
manager.show_students()
elif choice == '3':
manager.sort_by_score()
elif choice == '4':
break
中级应用级
文件单词统计器读取一个文本文件,统计其中每个单词出现的次数,并输出出现频率最高的10个单词。
import re
from collections import Counter
def word_counter(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
content = file.read()
# 使用正则表达式提取单词(只包含字母)
words = re.findall(r'\b[a-zA-Z]+\b', content.lower())
# 统计词频
word_count = Counter(words)
# 获取出现频率最高的10个单词
top_10 = word_count.most_common(10)
print(f"单词总数:{len(words)}")
print("出现频率最高的10个单词:")
for word, count in top_10:
print(f"{word}: {count}次")
except FileNotFoundError:
print(f"文件 {filename} 不存在")
# 使用示例
word_counter("sample.txt")
简易计算器(支持括号)实现一个支持加减乘除和括号的简易计算器,用户输入表达式,程序输出计算结果。
def calculate(expression):
# 去除空格
expression = expression.replace(' ', '')
def evaluate(s):
# 用栈实现表达式求值
stack = []
current_num = 0
sign = '+'
i = 0
while i < len(s):
if s[i].isdigit():
current_num = current_num * 10 + int(s[i])
elif s[i] == '(':
# 递归处理括号内表达式
count = 1
j = i + 1
while count > 0:
if s[j] == '(':
count += 1
elif s[j] == ')':
count -= 1
j += 1
current_num = evaluate(s[i+1:j-1])
i = j - 1
if i + 1 >= len(s) or s[i+1] in '+-*/':
if sign == '+':
stack.append(current_num)
elif sign == '-':
stack.append(-current_num)
elif sign == '*':
stack.append(stack.pop() * current_num)
elif sign == '/':
stack.append(stack.pop() / current_num)
sign = s[i+1] if i + 1 < len(s) else ''
current_num = 0
i += 1
return sum(stack)
return evaluate(expression)
# 使用示例
while True:
expr = input("请输入表达式(输入quit退出):")
if expr.lower() == 'quit':
break
try:
result = calculate(expr)
print(f"{expr} = {result}")
except:
print("表达式有误,请重新输入")
进阶算法级
迷宫求解(BFS)给定一个N×N的迷宫,用0表示可通行,1表示障碍物,使用广度优先搜索找到从起点到终点的最短路径。
from collections import deque
def solve_maze(maze, start, end):
n = len(maze)
# 四个方向:上、下、左、右
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
# BFS
queue = deque([[start]])
visited = {start}
while queue:
path = queue.popleft()
row, col = path[-1]
# 到达终点
if (row, col) == end:
return path
# 探索四个方向
for dr, dc in directions:
nr, nc = row + dr, col + dc
if 0 <= nr < n and 0 <= nc < n and maze[nr][nc] == 0 and (nr, nc) not in visited:
visited.add((nr, nc))
new_path = list(path)
new_path.append((nr, nc))
queue.append(new_path)
return None
# 测试用例
maze = [
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 1, 0],
[1, 1, 1, 0, 0],
[0, 0, 0, 0, 0]
]
start = (0, 0)
end = (4, 4)
path = solve_maze(maze, start, end)
if path:
print(f"找到路径:{path}")
print(f"路径长度:{len(path)}步")
else:
print("无法到达终点")
简易爬虫(抓取网页标题)从指定URL抓取网页内容,提取所有链接和页面标题(使用requests和BeautifulSoup)。
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def crawl_page(url):
try:
# 发送HTTP请求
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers, timeout=10)
response.encoding = response.apparent_encoding
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 获取页面标题
title = soup.title.string if soup.title else "无标题"
print(f"页面标题:{title}")
# 提取所有链接
links = []
for link in soup.find_all('a'):
href = link.get('href')
if href and not href.startswith('#') and not href.startswith('javascript:'):
# 将相对链接转换为绝对链接
full_url = urljoin(url, href)
links.append(full_url)
print(f"共找到 {len(links)} 个链接")
print("前10个链接:")
for i, link in enumerate(links[:10], 1):
print(f"{i}. {link}")
except Exception as e:
print(f"爬取失败:{e}")
# 使用示例
crawl_page("https://www.example.com")
项目实践级
待办事项管理器(数据持久化)开发一个待办事项管理器,支持添加、完成、删除、显示任务,并将数据保存到JSON文件中。
import json
import os
from datetime import datetime
class TodoManager:
def __init__(self, filename='todos.json'):
self.filename = filename
self.todos = self.load_todos()
def load_todos(self):
if os.path.exists(self.filename):
with open(self.filename, 'r', encoding='utf-8') as f:
return json.load(f)
return []
def save_todos(self):
with open(self.filename, 'w', encoding='utf-8') as f:
json.dump(self.todos, f, ensure_ascii=False, indent=2)
def add_todo(self, task, priority='普通'):
todo = {
'id': len(self.todos) + 1,
'task': task,
'priority': priority,
'created_at': datetime.now().strftime('%Y-%m-%d %H:%M'),
'completed': False
}
self.todos.append(todo)
self.save_todos()
print(f"已添加任务:{task}")
def complete_todo(self, todo_id):
for todo in self.todos:
if todo['id'] == todo_id:
todo['completed'] = True
todo['completed_at'] = datetime.now().strftime('%Y-%m-%d %H:%M')
self.save_todos()
print(f"已完成任务:{todo['task']}")
return
print(f"未找到ID为{todo_id}的任务")
def delete_todo(self, todo_id):
for i, todo in enumerate(self.todos):
if todo['id'] == todo_id:
deleted = self.todos.pop(i)
self.save_todos()
print(f"已删除任务:{deleted['task']}")
return
print(f"未找到ID为{todo_id}的任务")
def show_todos(self, show_all=True):
if not self.todos:
print("暂无任务")
return
print("=" * 50)
if show_all:
todos_to_show = self.todos
else:
todos_to_show = [t for t in self.todos if not t['completed']]
for todo in todos_to_show:
status = "✅" if todo['completed'] else "⬜"
priority_mark = "🔴" if todo['priority'] == '高' else "🟡" if todo['priority'] == '中' else "🟢"
print(f"{status} [{todo['id']}] {priority_mark} {todo['task']}")
print(f" 创建时间:{todo['created_at']}")
if todo['completed']:
print(f" 完成时间:{todo.get('completed_at', '未知')}")
print("-" * 30)
# 使用示例
def main():
manager = TodoManager()
while True:
print("\n--- 待办事项管理器 ---")
print("1. 添加任务")
print("2. 完成任务")
print("3. 删除任务")
print("4. 显示所有任务")
print("5. 显示未完成任务")
print("6. 退出")
choice = input("请选择操作:")
if choice == '1':
task = input("请输入任务内容:")
priority = input("请选择优先级(高/中/普通):") or '普通'
manager.add_todo(task, priority)
elif choice == '2':
manager.show_todos(show_all=False)
try:
todo_id = int(input("请输入要完成的任务ID:"))
manager.complete_todo(todo_id)
except ValueError:
print("请输入有效的数字ID")
elif choice == '3':
manager.show_todos()
try:
todo_id = int(input("请输入要删除的任务ID:"))
manager.delete_todo(todo_id)
except ValueError:
print("请输入有效的数字ID")
elif choice == '4':
manager.show_todos()
elif choice == '5':
manager.show_todos(show_all=False)
elif choice == '6':
print("再见!")
break
if __name__ == '__main__':
main()
这些练习题覆盖了Python编程的多个重要方面:
- 基础语法:变量、循环、条件判断、函数
- 数据结构:列表、字典、集合
- 面向对象:类、继承、封装
- 文件操作:读写文件、JSON处理
- 算法:搜索算法、数据处理
- 外部库:requests、bs4等
建议按照难度循序渐进练习,每完成一个题目后,可以尝试修改或扩展功能来加深理解。