pythonの単方向リストについて質問です。講義中に単方向リスト実装の穴埋め形式の練習問題が出まして、先生曰く、3カ所ある穴埋めのうち全てが最短で1行で表すことが出来るらしいのですが、自分で考えてみても10行前後の冗長なコードしか思いつきませんでした。その後最短各1行で表すやり方の解説はなく、「課題にはしないから気楽におうちで考えてみてね」の一言で終わりモヤモヤしています。かといってテスト期間が近いこともあり、要領の良くない自分としてはあまりこういったおまけ的なところよりも優先度の高い項目の勉強に時間を割きたいというのが正直なところです。
そこでお願いなのですが、誰か答えの思いついた方がいらっしゃれば教えていただきたいです。お願いします。
(穴埋めコード)「#ここを埋める」と書かれた3カ所が穴埋め対象です。
# リストの要素を定義するクラス
class Cell():
def __init__(self, n, k, v):
self.next = n # 次のCell
self.key = k # キー(文字列)
self.value = v # 値(数値)
# リストに要素を挿入する関数
def insertCell(head, key, value):
# ここを埋める
# リストからkeyに対応する要素を削除する関数
def deleteCell(head, key):
# ここを埋める
# リストからkeyに対応する要素の値を得る関数
def searchCell(head, key):
# ここを埋める
# リストを全てクリアする関数
def clearCell(head):
while head.next != None:
tmp = head.next.next
del head.next
head.next = tmp
# リストを全て表示する関数
def printCell(head) :
text = "[ "
while head.next != None:
text += str(head.next.value)
if head.next.next != None:
text += ", "
head = head.next
text += " ]"
print(text)
if __name__ == "__main__":
# リストの先頭
# Noneは次の要素が無いことを表す
head = Cell(None, "head", -1)
insertCell(head, "one", 1)
insertCell(head, "two", 2)
insertCell(head, "three", 3)
printCell(head); #[1, 2, 3]
deleteCell(head, "two");
printCell(head) # [1, 3]
insertCell(head, "four", 4)
insertCell(head, "five", 5)
deleteCell(head, "five")
printCell(head) # [1, 3, 4]
print(searchCell(head, "three")) # 3
print(searchCell(head, "two")) # not found
clearCell(head)
printCell(head) # []
No.4ベストアンサー
- 回答日時:
No.3
- 回答日時:
>問題点1、2ともども、もともとのサンプルコードの通りとなっております。
def insertCell
def deleteCell
・・・
def printCell
は、class Cell()内のメソッドかと思ったのですが、
そうではないのですね。
それなら、納得しました。
ご回答ありがとうございました!
そして誠に申し訳ありませんが、無事解決致しましたので解答を締め切ろうかと思います。申し訳ございません。
3回答いただきましたがここでのお礼で全回答へのお礼とさせていただきます。
ご協力の程ありがとうございました!
No.2
- 回答日時:
問題点1
insertCell(head, "one", 1)は
head.insertCell("one", 1)の誤り
printCell(head)は
head.printCell()の誤り
deleteCell(head, "two")は
head.deleteCell("two")の誤り(他のメソッドも同様)
のように思えるのですが、本当に配布されたサンプルコードに
insertCell(head, "one", 1)
insertCell(head, "two", 2)
insertCell(head, "three", 3)
printCell(head); #[1, 2, 3]
deleteCell(head, "two");
printCell(head) # [1, 3]
・・・以下省略・・・
と記述されていたのでしょうか。
問題点2
# リストに要素を挿入する関数
def insertCell(head, key, value):
は、誤りではないですが、
def insertCell(self, key, value):
と書くのが一般的です。
配布されたサンプルコードに
def insertCell(head, key, value):とかかれているなら、
意図的にselfでなくheadを使用したと思われます。
No.1
- 回答日時:
あなたから提示されたソースをインデントをつけて下記URLで実行してみました。
「#ここを埋める」箇所はとりあえず、コンパイルエラーにならないようにpassを入れてます。
https://ideone.com/enb8Th
補足要求です。
1.インデントはあってますか。
2.実行すると、50行目のinsertCell(head, "one", 1)
でNameError: name 'insertCell' is not defined
が、発生します。
50行目は、本当にこれで正しいことが保証されていますか。
3.# リストに要素を挿入する関数の引数の定義は
def insertCell(head, key, value):
となっていますが、本当にこれで正しいことが保証されていますか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
paiza python03 ランクC獲得
-
python03について。
-
vba クリップボードクリアにつ...
-
Google ColaboでGUI作成
-
batファイル、コマンドプロンプ...
-
Adobe Premiere Proです。 シー...
-
python3について。
-
文系のSE志望です。プログラミ...
-
P2P地震速報のEEW APIの仕様書...
-
htaccessで特定のディレクトリ...
-
pythonの画像の貼り付けについて
-
Processingについて
-
python コードについて(初学者...
-
Adobe Premiere Proについて質...
-
JRのjsonファイルって使って大...
-
Python - Excel で Webからデー...
-
google formsを使ったタスク依...
-
{ CONTROL Forms.Label.1}が...
-
Python... 環境設定 初心者です...
-
Selenium4でボタンをクリックで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptがoffだったらどっか...
-
海外の時間をホームページ上に表示
-
ホームページ内検索をフォーム...
-
【JavaScript】特定の条件で特...
-
JavaScriptからPerlへデータを...
-
JavaScriptを使用してマルチラ...
-
確認ダイアログを表示出来ない
-
【javascript】 IMEのカタカナ...
-
javascriptとcookieの判定とペ...
-
簡易版パスワード入力画面について
-
URL変更2
-
宜しくお願いします。
-
HTMLの取得と解析について
-
チェックボタンをクリックする...
-
pythonにおける単方向リストの...
-
パスワードを二つ用いて隠しペ...
-
カンマ区切り形式ではなく、セ...
-
キングファイルの背表紙を作成...
-
パワーポイントで参照ページを...
-
<IFRAME>でコンテンツ部分のみ...
おすすめ情報
1.配布されたサンプルコードを見ると、printCellの定義式のインデントがこんな感じ(画像)になっています。また、各定義式のインデントの位置はclass Cell~のインデントと同じく左詰になってます。
2.恐らく10行目で定義されているものと見比べても、見たところスペルミスや半角全角の違いもありませんし、insertCell はそれで間違いないかと思います。
3.この練習問題の次にチェイン法でテーブルに要素を挿入(insertTable(key, value))、テーブルから要素を削除、テーブルから値を検索するコードを書く問題が出ているのですが、そちらでこの練習問題で書いた3コードがそのまま使われている以上、insertCellの引数は(head, key, value)で間違いないかと思います。(まだチェイン法の方は解いてないので絶対この引数で合っているとはいえませんが...)
そうですね。
問題点1、2ともども、もともとのサンプルコードの通りとなっております。