学径 LearnPath

找东西和修 bug

1 / 1 · ← → 翻页

阅读模式

第 18 课

找东西和修 bug

从左到右找名字,读懂报错。

查找

学习目标

这节课要完成什么

学会线性查找。

读懂报错,一次补上一处。

情境

找书和改错别字

书架扫描

书架没排好,一本本看。

作文发下来,红笔在最后一行附近。

想一想

没排好能对半吗

没排好的书,不好对半折。

先学一本本找。

例题

线性查找

书架扫描

python
shelf = ["小明", "小红", "小派"]
target = "小红"
i = 0
found = False
while i < len(shelf):
    if shelf[i] == target:
        found = True
        break
    i = i + 1
print(found, i if found else -1)
  • 从左到右
  • 找到就停

想一想

一本本问

查找

每走一步,问一句:是不是它?

这叫线性查找。

例题

for 也能写

书架扫描

python
for i in range(len(shelf)):
    if shelf[i] == target:
        print(i)
        break
  • 下标从 0 走起
  • 找到 break

试一试

enumerate 照抄

查找

python
for i, book in enumerate(shelf):
    if book == target:
        print(i)
  • 先照抄
  • 同时拿到下标和内容

情境

猜中间

对半折

排好序的,可以猜中间。

这节课只认模板,不自己发明。

想一想

排好再折半

二分查找要先排好序。

乱书架,先别折半。

例题

少了盖子

报错末行

python
print("你好
  • SyntaxError
  • 先看最后一行提示

例题

少了冒号

报错末行

python
if score >= 60
    print("及格")
  • 也是语法问题
  • 补上冒号

想一想

Syntax 和 Name

报错末行

  • SyntaxError:写法破了
  • NameError:名字不认识

做一做

一次补一处

补上一处

  • 先看末行
  • 改一处,再跑

请学生只改一处,再运行。

做一做

这里该填 break

补上一处

python
if shelf[i] == target:
    found = True
    # 这里停住
  • 填 break
  • 不是 continue

请学生说出空处该填什么。

小结

这节课我学会了

查找

  • 线性查找从左到右
  • 先看报错末行
  • 一次只补一处

练一练

缺冒号是哪类错

报错末行

  • SyntaxError
  • NameError

练一练

找到了填什么

找到目标以后,想立刻停住。

填 break,还是 continue?

下一课

下一课

Python 主线,先到这儿。

查找

已到最后一页。可按 ← 回顾,或切换回阅读模式