Friends
"How to find friends" のミッションでは、特別に作られたデータ構造にアクセスすることはすばらしいです。 このミッションでは友人ネットワークを格納し扱うためのデータ構造を体得するでしょう。
新しいFriendsのインスタンスを返します。 "connections" はそれぞれ2つの要素を持つ反復可能(iterable)な集合(set)です。 それぞれのconnection は2つの名前の文字列を含みます。 connection は最初のデータでは繰り返すことが出来ますが、一度しか格納されません。 それぞれのconnection は2つの状態しかありません -- 存在するかしないか。
>>> Friends(({"a", "b"}, {"b", "c"}, {"c", "a"}, {"a", "c"}))
>>> Friends([{"1", "2"}, {"3", "1"}])
add (connection)
インスタンスにconnection を追加します。 "connection" は2つの名前(文字列)の集合です。 このconnectionが新しかったらTrueを返します。 このconnectionが既に存在していたらFalseを返します。
>>> f = Friends([{"1", "2"}, {"3", "1"}])
>>> f.add({"1", "3"})
False
>>> f.add({"4", "5"})
True
remove (connection)
インスタンスからconnection を削除します。 "connection" は2つの名前(文字列)の集合です。 connection が存在していたらTrueを返します。 インスタンスに connection が存在していなかったらFalseを返します。
>>> f = Friends([{"1", "2"}, {"3", "1"}])
>>> f.remove({"1", "3"})
True
>>> f.remove({"4", "5"})
False
names ()
名前の集合(set)を返します。この集合は誰かと関係のある名前だけを含みます。
>>> f = Friends(({"a", "b"}, {"b", "c"}, {"c", "d"}))
>>> f.names()
{"a", "b", "c", "d"}
>>> f.remove({"d", "c"})
True
>>> f.names()
{"a", "b", "c"}
connected (name)
与えられた "name" と関係する名前の集合を返します。 もしインスタンスに"name" が存在しなかったら空の集合を返します。
>>> f = Friends(({"a", "b"}, {"b", "c"}, {"c", "a"}))
>>> f.connected("a")
{"b", "c"}
>>> f.connected("d")
set()
>>> f.remove({"c", "a"})
True
>>> f.connected("c")
{"b"}
>>> f.remove({"c", "b"})
True
>>> f.connected("c")
set()
このミッションではすべてのデータは正しいので、値のチェックを実装する必要はありません。
入力 Friendsクラスのステートメントと式
出力 前述したふるまい
どうやって使われるか ここでは状態が変更可能なクラスを実装します。 これはいくつかの関数を持ち単純ではない構造で、オブジェクトの表現はより複雑になってます。
事前条件 すべてのデータは正しい