Python3基础进阶:25个实例精讲助力从入门到熟练(四)

Python入门:Python3基础练习题详解,从入门到熟练的25个实例(四)

前言

本系列文章旨在通过25个精选实例,帮助Python初学者从基础语法过渡到熟练应用。本篇为第四部分,聚焦字符串处理、循环控制、函数设计等核心知识点,每个实例均包含问题描述、代码实现与详细解析。

实例16:字符串反转与大小写转换

问题描述:输入一个字符串,输出其反转后的结果,并将所有字母转换为大写。

  1. def reverse_and_upper(s):
  2. reversed_str = s[::-1] # 切片反转字符串
  3. upper_str = reversed_str.upper() # 转换为大写
  4. return upper_str
  5. # 测试
  6. input_str = "Hello World"
  7. print(reverse_and_upper(input_str)) # 输出: DLROW OLLEH

解析

  • 字符串切片[::-1]是Python中反转字符串的高效方法。
  • upper()方法将所有字母转为大写,非字母字符不受影响。
  • 此类操作常见于数据清洗与预处理场景。

实例17:统计字符串中元音字母数量

问题描述:统计输入字符串中元音字母(a,e,i,o,u)的数量,不区分大小写。

  1. def count_vowels(s):
  2. vowels = "aeiou"
  3. count = 0
  4. for char in s.lower(): # 转换为小写统一处理
  5. if char in vowels:
  6. count += 1
  7. return count
  8. # 测试
  9. test_str = "Python Programming"
  10. print(count_vowels(test_str)) # 输出: 4

解析

  • 使用lower()方法统一大小写,避免重复判断。
  • in操作符检查字符是否属于元音集合。
  • 此类统计操作在文本分析中极为常见。

实例18:生成斐波那契数列前N项

问题描述:输入正整数N,输出斐波那契数列前N项。

  1. def fibonacci(n):
  2. fib_seq = [0, 1] # 初始化前两项
  3. while len(fib_seq) < n:
  4. next_num = fib_seq[-1] + fib_seq[-2] # 计算下一项
  5. fib_seq.append(next_num)
  6. return fib_seq[:n] # 返回前N项
  7. # 测试
  8. print(fibonacci(10)) # 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

解析

  • 列表存储数列,通过索引访问最后两项。
  • while循环动态扩展列表,直至达到指定长度。
  • 斐波那契数列是算法入门经典案例,体现递推思想。

实例19:判断素数(优化版)

问题描述:输入正整数N,判断其是否为素数(优化算法)。

  1. def is_prime(n):
  2. if n <= 1:
  3. return False
  4. if n == 2:
  5. return True
  6. if n % 2 == 0: # 排除偶数
  7. return False
  8. for i in range(3, int(n**0.5) + 1, 2): # 仅检查奇数因子
  9. if n % i == 0:
  10. return False
  11. return True
  12. # 测试
  13. print(is_prime(29)) # 输出: True
  14. print(is_prime(30)) # 输出: False

解析

  • 排除小于2的数、2以外的偶数。
  • 仅检查√n范围内的奇数因子,大幅减少计算量。
  • 素数判断是密码学、哈希算法的基础。

实例20:列表去重并排序

问题描述:输入一个列表,去除重复元素后按升序排序。

  1. def deduplicate_and_sort(lst):
  2. unique_lst = list(set(lst)) # 去重
  3. unique_lst.sort() # 排序
  4. return unique_lst
  5. # 测试
  6. input_list = [3, 1, 2, 2, 4, 3]
  7. print(deduplicate_and_sort(input_list)) # 输出: [1, 2, 3, 4]

解析

  • set()自动去重,转换为列表后调用sort()
  • 也可使用sorted(set(lst))一步完成。
  • 数据去重是数据预处理的关键步骤。

实例21:计算列表元素平均值

问题描述:输入一个数值列表,计算其元素的平均值。

  1. def calculate_average(lst):
  2. if not lst: # 处理空列表
  3. return 0
  4. return sum(lst) / len(lst)
  5. # 测试
  6. numbers = [10, 20, 30, 40]
  7. print(calculate_average(numbers)) # 输出: 25.0

解析

  • sum()求和,len()获取长度。
  • 空列表判断避免除零错误。
  • 平均值计算是统计分析的基础。

实例22:查找列表中最大值及其索引

问题描述:输入一个列表,返回最大值及其首次出现的索引。

  1. def find_max_and_index(lst):
  2. max_val = max(lst)
  3. max_index = lst.index(max_val)
  4. return max_val, max_index
  5. # 测试
  6. data = [5, 8, 2, 8, 3]
  7. print(find_max_and_index(data)) # 输出: (8, 1)

解析

  • max()获取最大值,index()查找首次出现位置。
  • 若需所有最大值索引,可用列表推导式:
    1. max_val = max(lst)
    2. indices = [i for i, x in enumerate(lst) if x == max_val]

实例23:字典键值对交换

问题描述:输入一个字典,交换其键值对(假设值可哈希)。

  1. def swap_dict_keys_values(d):
  2. return {v: k for k, v in d.items()} # 字典推导式
  3. # 测试
  4. original_dict = {"a": 1, "b": 2}
  5. swapped_dict = swap_dict_keys_values(original_dict)
  6. print(swapped_dict) # 输出: {1: 'a', 2: 'b'}

解析

  • 字典推导式简洁高效。
  • 注意值必须可哈希(如不可用列表作为值)。

实例24:递归计算阶乘

问题描述:输入正整数N,递归计算其阶乘。

  1. def factorial_recursive(n):
  2. if n == 0 or n == 1: # 基线条件
  3. return 1
  4. else:
  5. return n * factorial_recursive(n - 1) # 递归调用
  6. # 测试
  7. print(factorial_recursive(5)) # 输出: 120

解析

  • 递归需明确基线条件与递归关系。
  • 阶乘是递归入门经典案例,但N较大时易栈溢出。

实例25:文件读写与行数统计

问题描述:统计指定文本文件的行数。

  1. def count_file_lines(filename):
  2. try:
  3. with open(filename, "r", encoding="utf-8") as file:
  4. lines = file.readlines()
  5. return len(lines)
  6. except FileNotFoundError:
  7. print(f"错误:文件 {filename} 不存在")
  8. return -1
  9. # 测试(需准备test.txt文件)
  10. # print(count_file_lines("test.txt"))

解析

  • with语句自动管理文件资源。
  • readlines()读取所有行,len()统计数量。
  • 异常处理增强程序健壮性。

总结与建议

  1. 实践优先:完成每个实例后,尝试修改参数或扩展功能(如实例24改为尾递归优化)。
  2. 调试技巧:使用print()或调试器(如VS Code的Python调试)跟踪变量变化。
  3. 文档参考:遇到不懂的函数时,通过help(function)或官方文档深入学习。
  4. 项目整合:将多个实例组合为小型项目(如用实例17+20实现单词统计工具)。

本系列后续将覆盖面向对象编程、异常处理、文件操作等进阶主题,助力读者从基础到熟练的跨越。