当前位置:首页>python>一种全新的思维方式|《Think Python》第7章

一种全新的思维方式|《Think Python》第7章

  • 2026-09-02 18:57:43
一种全新的思维方式|《Think Python》第7章

Python 迭代与查找:遍历、计数、搜索三大核心技能

📝 用 for 循环遍历文本 + 统计单词 + 线性查找,实战编程思维


7. 迭代与查找

本章我们将:

  • 用 for 循环遍历字符串与文件
  • 统计英文单词中含字母 e 的比例
  • 学习变量更新、计数器、增量赋值
  • 掌握 in 判断与线性搜索
  • 使用 doctest 自动测试函数

7.1 循环与字符串

遍历字符串中的每个字符:

# 遍历字符串,空格结尾不换行for letter in'Gadsby':print(letter, end=' ')

运行结果:

G a d s b y

判断单词是否含字母 e

# 判断单词是否包含 e 或 Edefhas_e(word):for letter in word:# 找到就立即返回 Trueif letter == 'e'or letter == 'E':returnTrue# 遍历完都没找到returnFalse
print(has_e('Gadsby'))print(has_e('Emma'))

运行结果:

FalseTrue

7.2 读取单词列表文件

读取 words.txt 单词表(约11万个单词)。

# 打开文件file_object = open('words.txt')# 读取一行line = file_object.readline()print(line)

运行结果:

'aa\n'
# 去掉换行符和空白word = line.strip()print(word)

运行结果:

'aa'

逐行遍历文件:

for line inopen('words.txt'):    word = line.strip()print(word)

7.3 更新变量

在循环中修改变量的值(累加、累减等)。

x = 5# 赋值更新x = 7# 增量更新(在原值上+1)x = x + 1print(x)

运行结果:

8

增量赋值运算符

z = 0# 等价于 z = z + 1z += 1# 等价于 z = z + 2z += 2print(z)

运行结果:

3
  • += 累加
  • -= 累减
  • *= 累乘

7.4 循环与计数

统计总单词数、含 e 的单词数。

# 总单词计数器total = 0# 含 e 的单词计数器count = 0for line inopen('words.txt'):    word = line.strip()    total += 1if has_e(word):        count += 1print('总单词数:', total)print('含 e 的单词数:', count)print('百分比:', count / total * 100)

运行结果:

总单词数: 113783含 e 的单词数: 76162百分比: 66.936...

7.5 in 运算符

直接判断字符是否在字符串中:

defhas_e(word):# 转小写后判断是否包含 'e'return'e'in word.lower()
print(has_e('Gadsby'))print(has_e('Emma'))

运行结果:

FalseTrue

7.6 搜索(线性查找)

线性查找:逐个检查,找到立即返回。

# 判断单词是否包含指定字母表中的任意一个defuses_any(word, letters):for letter in word.lower():if letter in letters.lower():returnTruereturnFalse
print(uses_any('banana', 'aeiou'))print(uses_any('apple', 'xyz'))

运行结果:

TrueFalse

7.7 文档测试 doctest

在文档字符串里写测试用例,自动校验函数。

defuses_any(word, letters):"""检查单词是否包含指定字母中的任意一个    >>> uses_any('banana', 'aeiou')    True    >>> uses_any('apple', 'xyz')    False    """for letter in word.lower():if letter in letters.lower():returnTruereturnFalse
# 运行测试from doctest import run_docstring_examplesdefrun_doctests(func):    run_docstring_examples(func, globals(), name=func.__name__)run_doctests(uses_any)

7.8 术语表

英文
中文
说明
iteration
迭代
循环遍历
counter
计数器
用于统计次数的变量
update
更新
在原值上修改变量
linear search
线性查找
逐个查找元素
method
方法
对象的函数(如 strip())
doctest
文档测试
注释里自动测试代码

7.9 练习题(带答案模板)

7.9.2 uses_none

检查单词不使用任何禁用字母:

defuses_none(word, forbidden):"""检查单词是否不使用禁用字母    >>> uses_none('banana', 'xyz')    True    >>> uses_none('apple', 'efg')    False    """for letter in word.lower():if letter in forbidden.lower():returnFalsereturnTrue

7.9.3 uses_only

检查单词只用允许的字母:

defuses_only(word, available):"""检查单词是否只使用指定字母    >>> uses_only('banana', 'ban')    True    >>> uses_only('apple', 'apl')    False    """for letter in word.lower():if letter notin available.lower():returnFalsereturnTrue

7.9.4 uses_all

检查单词包含所有必需字母:

defuses_all(word, required):"""检查单词是否包含所有必需字母    >>> uses_all('banana', 'ban')    True    >>> uses_all('apple', 'api')    False    """for letter in required.lower():if letter notin word.lower():returnFalsereturnTrue

7.9.5 拼写蜜蜂游戏 check_word

defcheck_word(word, available, required):"""检查单词是否符合拼写蜜蜂规则    >>> check_word('color', 'ACDLORT', 'R')    True    >>> check_word('rat', 'ACDLORT', 'R')    False    """iflen(word) < 4:returnFalseif required.lower() notin word.lower():returnFalsereturn uses_only(word, available)

最新文章

随机文章