回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我是一个完全的面向对象编程初学者,我有一个奇怪的家庭作业。你知道吗</p>
<p>基本上是关于圣诞老人,他是如何在某个城市,走家串户,给人们礼物。你知道吗</p>
<p>我作业的第一部分是这样的:</p>
<p>写一个类<code>City</code>。你知道吗</p>
<ul>
<li>构造函数没有参数。它做什么,取决于你:它必须为其他方法准备地形。你知道吗</li>
<li>方法<code>gift(x, y)</code>记录了坐标<code>(x, y)</code>处的房子收到了礼物</li>
<li>方法<code>was_gifted(x, y)</code>返回<code>True</code>如果<code>(x, y)</code>的房子得到了礼物;<code>False</code>否则。你知道吗</li>
<li>方法<code>all_gifted()</code>返回所有收到礼物的房子的一组坐标。你知道吗</li>
</ul>
<p>到目前为止,我有这个(不知道它是否正确):</p>
<pre><code>class City:
def __init__(self):
self.coordinates = set()
def gift(self, x, y):
self.coordinates.add((x, y))
def was_gifted(self, x, y):
if (x, y) in self.coordinates:
return True
def all_gifted(self):
self.coordinates
</code></pre>
<p>我作业的第二部分是这样的:</p>
<p>写一个类<code>Santa</code>。你知道吗</p>
<ul>
<li>构造器有一个论点,代表了圣诞老人将在哪个城市分发礼物。起初,他站在坐标<code>(0, 0)</code>。你知道吗</li>
<li>方法<code>move(c)</code>获取字符<code>"v"</code>、<code>"^"</code>、<code>"<"</code>或<code>">"</code>,并将圣诞老人向下、向上、向左或向右移动一个字段。坐标<code>y</code>这次向上增加,即<code>"^"</code>增加1,<code>"v"</code>减少。你知道吗</li>
<li>方法<code>moves(path)</code>获取一个这样的字符串,并相应地移动圣诞老人。你知道吗</li>
<li>方法<code>gift()</code>在当前圣诞老人的坐标给房子一个礼物。注意<code>gift</code>没有参数(除了<code>self</code>)。你知道吗</li>
</ul>
<p>除此之外,编写类<code>RapidSanta</code>,它是从<code>Santa</code>派生的。它的构造函数得到<code>city</code>和<code>speed</code>。<code>RapidSanta</code>与普通的不同之处在于它不按单个字段移动,而是使用我们在构造函数中设置的<code>speed</code>。你知道吗</p>
<p>有人能帮帮我吗?因为我都不知道从哪里开始。如果有人知道类似的“问题”,请在论坛上链接或发帖。我想掌握这一点,但坦率地说,我不是一个编程天才。事先谢谢你的帮助。以下是我的作业必须通过的考试。你知道吗</p>
<pre><code>import unittest
class TestCity(unittest.TestCase):
def test_City(self):
a = City()
b = City()
self.assertSetEqual(a.all_gifted(), set())
self.assertSetEqual(b.all_gifted(), set())
self.assertFalse(a.is_gifted(1, 3))
self.assertFalse(b.is_gifted(1, 3))
a.gift(1, 3)
self.assertSetEqual(a.all_gifted(), {(1, 3)})
self.assertSetEqual(b.all_gifted(), set())
self.assertTrue(a.is_gifted(1, 3))
self.assertFalse(b.is_gifted(1, 3))
a.gift(1, 3)
self.assertSetEqual(a.all_gifted(), {(1, 3)})
self.assertSetEqual(b.all_gifted(), set())
self.assertTrue(a.is_gifted(1, 3))
self.assertFalse(a.is_gifted(-2, -3))
self.assertFalse(b.is_gifted(1, 3))
a.gift(-2, -3)
self.assertSetEqual(a.all_gifted(), {(1, 3), (-2, -3)})
self.assertSetEqual(b.all_gifted(), set())
self.assertTrue(a.is_gifted(1, 3))
self.assertTrue(a.is_gifted(-2, -3))
self.assertFalse(b.is_gifted(1, 3))
b.gift(0, 0)
self.assertSetEqual(a.all_gifted(), {(1, 3), (-2, -3)})
self.assertSetEqual(b.all_gifted(), {(0, 0)})
self.assertTrue(a.is_gifted(1, 3))
self.assertTrue(a.is_gifted(-2, -3))
self.assertFalse(b.is_gifted(1, 3))
self.assertTrue(b.is_gifted(0, 0))
self.assertFalse(a.is_gifted(0, 0))
class TestSanta(unittest.TestCase):
def test_gift(self):
m = City()
n = City()
b = Santa(m)
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0)})
self.assertSetEqual(n.all_gifted(), set())
def test_move(self):
m = City()
n = City()
b = Santa(m)
c = Santa(m)
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0)})
self.assertSetEqual(n.all_gifted(), set())
b.move("^")
b.move("<")
b.move("<")
b.gift()
b.move("v")
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1)})
self.assertSetEqual(n.all_gifted(), set())
c.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1)})
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1), (-2, 0)})
b.move(">")
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1), (-2, 0)})
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1), (-2, 0), (-1, 0)})
c.move("v")
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1), (-2, 0), (-1, 0)})
c.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (-2, 1), (-2, 0), (-1, 0), (0, -1)})
self.assertSetEqual(n.all_gifted(), set())
def test_moves(self):
m = City()
b = Santa(m)
b.moves("v<<^^^>>>>>")
b.gift()
self.assertSetEqual(m.all_gifted(), {(3, 2)})
cc = ""
def p(c):
nonlocal cc
cc += c
b.move = p
b.moves("v<<^^^>>>>>")
self.assertEqual(
cc, "v<<^^^>>>>>",
"Write a method `moves` so that it will use method `move`")
def test_rapid_Santa(self):
m = City()
b = RapidSanta(m, 2)
c = RapidSanta(m, 3)
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0)})
b.move("^")
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (0, 2)})
b.move("<")
b.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (0, 2), (-2, 2)})
c.move("<")
c.gift()
self.assertSetEqual(m.all_gifted(), {(0, 0), (0, 2), (-2, 2), (-3, 0)})
def test_methods(self):
self.assertIs(RapidSanta.moves, Santa.moves,
"RapidSanta has to inherit method moves")
self.assertIs(RapidSanta.gift, Santa.gift,
"RapidSanta has to inherit method gift")
</code></pre>