🐸

成员铃

数据与文本工具python-data-tinkerer-11-the-membership-bell
奖励: 105 XP
|

成员铃

Hoppy 把回收标签整理好后,森林档案馆深处亮起了一只小铜铃。铃旁边不是长长的登记表,而是一份只保留成员的魔法名单,里面写着 "Pip""Mora""Tala"

现在门口来了 "Pip"。Hoppy 不需要数名单里有几个人,也不需要关心顺序;守门铃只问一个很直接的问题:这个名字是不是名单成员?如果在,就可以敲铃;不在,就先不能进去。

set 很适合回答“在不在里面”

当你的任务变成“这个东西是不是成员之一”,set 就会很顺手。因为 set 的重点本来就是成员本身,而不是位置。配上 in,你就能直接得到一个布尔结果:在里面就是 True,不在里面就是 False

bell_members = {"Mira", "Jun", "Pip"}
visitor_name = "Jun"

print("Bell members:", bell_members)
print("Visitor:", visitor_name)

can_ring_bell = visitor_name in bell_members

print("Can ring bell:", can_ring_bell)

这里的 visitor_name in bell_members,读起来就像一句直接的问题:“visitor_name 这个名字在 bell_members 里面吗?” 这正是 set 很有存在感的时刻。你不是在数次数,也不是在比较共同项;你只是想快点知道一个成员是否属于这份名单。

这就是一个轻量白名单任务

很多真实小任务都会长这样:某个标签是否允许通行、某个房间是否在可进入清单里、某个名字是否在成员表里。它们的共同点是一样的:先准备一份“允许集合”,再判断目标值在不在里面。

这节课先把动作练到很清楚就够了:一个 set,一次 in 判断,一个布尔结果。先把这个画面钉牢,下一课再去看集合和集合之间的关系。

1
先看已经准备好的成员名单和来访名字

starter 已经给了你 bell_membersvisitor_name。这次你不用造新的集合,重点是拿它来做判断。

2
把占位线改成真正的成员判断

visitor_name in bell_members 计算结果,并把它存进 can_ring_bell

3
运行后观察布尔结果

你会先看到成员名单和来访名字,再看到 Can ring bell: 这一行。现在最重要的直觉就是:set 不只会去重,它也特别适合做“在不在里面”的判断。

把 set 的用途变具体

上一课的 set 像是“唯一收藏架”。这一课它变成了一份能拿来做事的名单。只要你要回答“这个东西是不是成员”,set + in 往往就会很自然。

参考答案
点击展开
参考答案:
bell_members = {"Pip", "Mora", "Tala"}
visitor_name = "Pip"

print("Bell members:", bell_members)
print("Visitor:", visitor_name)

can_ring_bell = visitor_name in bell_members

print("Can ring bell:", can_ring_bell)
高级技巧
想更进一步?点击展开

现在你还不需要讨论 set 为什么“更快”,也不用提前学交集、差集这些集合关系。先记住这一幅最实用的画面:手里有一份成员集合,眼前有一个待检查的值,而 in 可以帮你立刻得到答案。

当你以后看到白名单、允许名单、黑名单、已登记标签这类任务时,就可以想起今天这只成员铃:真正想问的,其实只是“它在不在里面?”

Loading...
终端输出
Terminal
Ready to run...