Python编程练习题案例?

wen python案例 6

本文目录导读:

  1. 基础入门级
  2. 中级应用级
  3. 进阶算法级
  4. 项目实践级

这里提供几个不同难度的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编程的多个重要方面:

  1. 基础语法:变量、循环、条件判断、函数
  2. 数据结构:列表、字典、集合
  3. 面向对象:类、继承、封装
  4. 文件操作:读写文件、JSON处理
  5. 算法:搜索算法、数据处理
  6. 外部库:requests、bs4等

建议按照难度循序渐进练习,每完成一个题目后,可以尝试修改或扩展功能来加深理解。

标签: 循环结构 列表操作

抱歉,评论功能暂时关闭!