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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Google ColaboでGUI作成
-
vba クリップボードクリアにつ...
-
google Colabでmatplotlibの描...
-
VBAでパワーシェルを実行したい...
-
プログラミングに興味があるの...
-
テキストファイルの1行目のみを...
-
Python... 環境設定 初心者です...
-
そのまま使っただけなのに・・...
-
このURLで広告を出しているのは...
-
覚えることが少ないプログラミ...
-
VBA 電話番号の正規表現について
-
VBSでテキストファイルの2行目...
-
ExcelVBAでFormulaR1C1を列範囲...
-
初心者powershellのPS1ファイル...
-
iOSゲームアプリが作りたいと思...
-
AIのプログラムについて教えて...
-
Webサイト内に埋め込んだmp4動...
-
REGZAに接続できない(パソコン)
-
PythonのTkinter詳しい方へ。画...
-
Pythonのre.split()の正規表現...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
確認ダイアログを表示出来ない
-
海外の時間をホームページ上に表示
-
チェックボタンをクリックする...
-
iframeの部分だけリロード
-
【JavaScript】特定の条件で特...
-
HTMLの取得と解析について
-
ホームページ内検索をフォーム...
-
javascriptとcookieの判定とペ...
-
カンマ区切り形式ではなく、セ...
-
パワーポイントで参照ページを...
-
<IFRAME>でコンテンツ部分のみ...
-
txtファイル内の指定の単語の数...
-
エクセルVBAでマルチページの切...
-
リンクをアップデートするしな...
-
キングファイルの背表紙を作成...
-
TEX ページ番号について
-
htmlでテキストファイルの中身...
-
「リンク」と「ハイパーリンク...
-
Ctrl+Hで置換にならない
-
UserForm.showでマルチページ1...
おすすめ情報
1.配布されたサンプルコードを見ると、printCellの定義式のインデントがこんな感じ(画像)になっています。また、各定義式のインデントの位置はclass Cell~のインデントと同じく左詰になってます。
2.恐らく10行目で定義されているものと見比べても、見たところスペルミスや半角全角の違いもありませんし、insertCell はそれで間違いないかと思います。
3.この練習問題の次にチェイン法でテーブルに要素を挿入(insertTable(key, value))、テーブルから要素を削除、テーブルから値を検索するコードを書く問題が出ているのですが、そちらでこの練習問題で書いた3コードがそのまま使われている以上、insertCellの引数は(head, key, value)で間違いないかと思います。(まだチェイン法の方は解いてないので絶対この引数で合っているとはいえませんが...)
そうですね。
問題点1、2ともども、もともとのサンプルコードの通りとなっております。