← 返回 Day 30 正文

Day 30 · 练习与清单

Day 030 — 阶段项目:命令行工具:完成清单与练习题

✅ 完成清单

概念理解

Python 实现

代码实践


📝 练习题

练习 1:实现一个简单的计算器 CLI

python
"""
使用 argparse 实现一个命令行计算器。
支持基本四则运算和幂运算。

用法:
  $ python calc.py 5 + 3      → 8.0
  $ python calc.py 10 / 3     → 3.333...
  $ python calc.py 2 ** 10    → 1024.0
"""
import argparse

def calc():
    # 你的代码
    pass

if __name__ == '__main__':
    calc()

练习 2:文件分割工具

python
"""
实现一个文件分割工具,将大文件分割成指定大小的小文件。

用法:
  $ python file-split.py --file large.log --size 1M --output chunk_

参数:
  --file: 需要分割的文件
  --size: 每块的大小(支持 K, M, G 后缀)
  --output: 输出文件前缀
"""
def split_file(file_path, chunk_size, output_prefix):
    # 你的代码
    pass

# 测试
# split_file('bigfile.log', '1M', 'chunk_')

练习 3:Todo 管理器 CLI

python
"""
实现一个简单的 Todo 命令行管理器。
数据存储到 JSON 文件。

用法:
  $ python todo.py add "学习 Python"          → 添加任务
  $ python todo.py list                        → 列出所有任务
  $ python todo.py done 1                      → 标记任务完成
  $ python todo.py delete 1                    → 删除任务
  $ python todo.py clear                       → 清空已完成
"""
# 你的代码

练习 4:密码生成器 CLI

python
"""
实现一个密码生成器 CLI。

用法:
  $ python passgen.py --length 16 --no-symbols  → 生成不含符号的密码
  $ python passgen.py -l 12 -n 5               → 生成 5 个 12 位密码
  $ python passgen.py --no-digits              → 不含数字

参数:
  -l, --length: 密码长度(默认 16)
  -n, --count: 生成数量(默认 1)
  --no-digits: 不含数字
  --no-symbols: 不含符号
  --no-uppercase: 不含大写字母
"""
import argparse
import random
import string

def generate_password(length=16, use_digits=True, use_symbols=True,
                      use_uppercase=True):
    # 你的代码
    pass

# 测试
print(generate_password())
print(generate_password(8, use_symbols=False))

练习 5:日志监控器

python
"""
实现一个实时日志监控器,检测文件变化并过滤指定级别的日志。

用法:
  $ python log-monitor.py app.log --level ERROR
  $ python log-monitor.py app.log --level WARNING --tail 50
  $ python log-monitor.py app.log --follow  # 持续监控

参数:
  logfile: 日志文件(位置参数)
  --level: 过滤级别(INFO/WARNING/ERROR)
  --tail: 显示末尾 N 行
  --follow: 持续监控文件写入
  --output: 输出到文件(可选)
"""
import time
import os

def tail_file(filepath, n=10):
    """类 tail 命令:显示文件末尾 N 行"""
    # 你的代码
    pass

def follow_file(filepath, callback):
    """类 tail -f 命令:持续监控文件变化"""
    # 你的代码
    pass

# 测试
# tail_file('app.log', 5)

📊 自评表

技能 初学者 理解 掌握 熟练
sys.argv 手动解析 ☐ ☐ ☐ ☐
argparse 基础用法 ☐ ☐ ☐ ☐
子命令 (subparsers) ☐ ☐ ☐ ☐
自定义参数类型 ☐ ☐ ☐ ☐
文件 I/O 工具 ☐ ☐ ☐ ☐
管道输入检测 ☐ ☐ ☐ ☐
CLI 错误处理 ☐ ☐ ☐ ☐
setup.py 打包 ☐ ☐ ☐ ☐

🔗 参考资源