轨道
/
Python
Python
/
练习
/
幼儿园花园
幼儿园花园

幼儿园花园

简单

简介

幼儿园班正在学习种植植物。老师觉得,给班里的孩子一些种子,让他们种在泥土里生长,是个不错的主意。为此,孩子们沿着窗台摆上了小杯子,每个杯子里种一种植物。孩子们可以从四种可供选择的种子中挑选自己最喜欢的:grass、clover、radishes 和 violets。

说明

你的任务是:给定一张图示,判断幼儿园班里的每个孩子负责哪些植物。

班里有 12 个孩子:

  • Alice、Bob、Charlie、David、Eve、Fred、Ginny、Harriet、Ileana、Joseph、Kincaid 和 Larry。

这里种着四种不同的种子:

植物 图示编码
Grass G
Clover C
Radish R
Violet V

每个孩子分到四个杯子,每行两个:

[window][window][window]
........................ # each dot represents a cup
........................

老师按照孩子名字的字母顺序来分配杯子,也就是说 Alice 排在最前面,Larry 排在最后。

下面是一张示例图示,表示 Alice 的植物:

[window][window][window]
VR......................
RG......................

在离窗户最近的第一行,她有一株 violet 和一株 radish。 第二行,她有一株 radish 和一些 grass。

你的程序会按从左到右的顺序收到这些植物,从离窗户最近的那一行开始。 据此,它应该能判断出每株植物分别属于哪个学生。

例如,如果告诉它花园长这样:

[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV

那么,如果问它 Alice 的植物,它应该给出:

  • Violets, radishes, violets, radishes

而问 Bob 的植物则会得到:

  • Clover, grass, clover, clover

本练习在 Python 赛道上的组织方式

本练习的测试要求你把程序实现为一个 Garden class(另见 classes)。 如果你不熟悉 Python 中的类,这篇 Real Python 教程 是不错的额外起点。

你的 class 需要实现一个名为 plants 的 method,它接收学生的名字作为实参,并返回属于该学生的植物名称 list。

构造函数

创建示例花园:

[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV

在测试中会表示为 Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV")。

要让这种表示方式生效,你的 class 需要实现一个 __init__() 特殊方法。 如果你不熟悉 __init__() 或构造函数,Python 文档中的类和实例对象有更详细的说明。

默认参数

在某些测试中,会把一个由学生组成的 list 作为实参传给 __init__()。 它应该覆盖题目说明中提供的 12 名学生名单。 下面这两条语句都必须能在你的 __init__() 方法下正常工作:

# Make a garden based on the default 12-student roster.
Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV") 

# Make a garden based on a 2-student roster.
Garden("VRCC\nVCGG", students=["Valorie", "Raven"]) 

一种做法是把学生 list 设为默认实参;Python 文档在讲解函数定义时深入介绍了default parameters。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 幼儿园花园 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。