← 返回 Day 11 正文

Day 11 · 练习与清单

Day 011 完成清单 ✅

函数基础

📖 已学内容

函数定义与调用

参数传递机制

返回值与 None

文档字符串(docstring)

实战:计算器函数库


✏️ 练习题

练习 1: 温度转换器

要求: - 编写三个函数:c_to_f(c)、f_to_c(f)、c_to_k(c) - 再写一个通用函数 convert_temp(value, from_unit, to_unit) - 用户输入 25 C to F,程序输出 25.0°C = 77.0°F

提示: 先统一转为摄氏度,再转为目标单位。

示例运行:

请输入: 100 C to F
100.0°C = 212.0°F

请输入: 32 F to C
32.0°F = 0.0°C

请输入: 0 K to C
0.0K = -273.15°C

练习 2: 字符串处理函数库

要求: - 编写以下字符串处理函数:

函数 功能 示例
reverse(s) 反转字符串 reverse("hello") → "olleh"
count_vowels(s) 统计元音字母数 count_vowels("hello") → 2
is_palindrome(s) 判断回文字符串 is_palindrome("racecar") → True
capitalize_words(s) 每个单词首字母大写 capitalize_words("hello world") → "Hello World"
word_count(s) 统计单词数 word_count("hello world python") → 3

注意: 不要使用内置的 [::-1]、str.count() 等方法,自己用循环实现逻辑。

练习 3: 简单计算器(支持中缀表达式)

要求: - 用户输入形如 3 + 5 * 2 的表达式 - 程序解析并计算结果(注意运算优先级:先乘除,后加减) - 支持 + - * / 四种运算 - 提示:先将表达式拆分为 tokens,然后处理优先级

示例运行:

请输入表达式: 3 + 5 * 2
结果: 13  (不是 16!因为有运算符优先级)

请输入表达式: (10 - 3) * 2 + 4 / 2
结果: 16

挑战模式: 支持括号 () 改变运算优先级。

练习 4: 猜数字游戏(用函数重构)

要求: 把之前在 Day 010 写的猜数字游戏重构成函数版本:

python
def generate_target(min_val=1, max_val=100):
    """生成随机目标数字。"""
    pass

def get_user_guess():
    """获取用户输入并验证。"""
    pass

def check_guess(guess, target):
    """比较猜测,返回提示信息。"""
    pass

def play_game(min_val=1, max_val=100, max_attempts=10):
    """游戏主逻辑。"""
    pass

if __name__ == "__main__":
    play_game()

练习 5: 函数分析器

要求: 编写一个函数 analyze_function(func, test_inputs),它能:

  1. 接收一个函数和一组测试输入
  2. 对每个输入调用函数
  3. 返回一个包含以下信息的字典: - function_name: 函数名 - docstring: 文档字符串 - results: 输入 → 输出 的映射 - total_time: 总执行时间(用 time.time() 测量)

示例:

python
def square(x):
    """返回 x 的平方。"""
    return x * x

analysis = analyze_function(square, [1, 2, 3, 4, 5])
print(analysis)
# {
#   'function_name': 'square',
#   'docstring': '返回 x 的平方。',
#   'results': {1: 1, 2: 4, 3: 9, 4: 16, 5: 25},
#   'total_time': 0.000123  # 示例值
# }

📝 额外挑战


📓 学习笔记

```