M.ドーソンの著書「Programming in Python」の新版があるかどうかを尋ねる手紙が編集部に時々送られます。 オリジナルの「絶対初心者のためのPythonプログラミング、第3版」が2010年にリリースされたという事実にもかかわらず、それはまだamazon.comで最高の状態にあります。 本の内容は、単純なゲームのプログラミングの実際的な例に基づいています。 私たちは専門家の意見を知ることに非常に興味を持っています。それにより、本を出版するかどうかを決めることができます。
詳細な目次はこちらでご覧いただけます 。
第5章のリストと辞書からの抜粋。 ゲーム「ハングマン」
タプルは、単一のシーケンスで異なるタイプの要素を操作するための良い方法です。 しかし、タプルが不変であるという事実から、不便な場合があります。 幸いなことに、リストが変更可能であるという理由だけで、タプルと同じことを行う、いわゆるリストという異なる種類のシーケンスがあります。 その要素は削除でき、新しい要素を追加できます。 リストを並べ替えることもできます。 辞書の別のさまざまなシーケンスを紹介します。 リストが値のセットとして編成されている場合、辞書は値のペアのセットです。 本棚の名前と同じように、辞書を使用すると、他と一致する値を見つけることができます。 詳細については、この章では次の方法を学習します。
•リストを作成し、インデックスを作成してスライスを作成します。
•リストアイテムの追加と削除。
•リストを並べ替えて値を最後に追加できるリストメソッドを適用します。
•複雑なデータを表現できるネストされたシーケンスを適用する。
•辞書を使用して値のペアを操作します。
•辞書アイテムを追加および削除します。
ゲーム「ハングマン」の知識
この章の焦点はハングマンプロジェクトにあります。 ユーザーから密かに、コンピューターは単語を選択し、プレイヤーは仮定を文字で表現することで推測しようとする必要があります。 プレイヤーがミスをするたびに、コンピュータは絞首台の下の人物の画像を画面に描画します。 割り当てられた試行回数でプレイヤーが単語を推測できなかった場合、「ハング」は死にます。 図 5.1–5.3は、すべての恐ろしい壮大さでゲームプレイを示しています。
ゲームはそれ自体が興味深いだけではありません。 また、この章の終わりまでに、独自のバージョンのゲームを作成する方法を学習できることも注目に値します。 たとえば、「秘密の」単語の個人的なリストを取得したり、私の原始的な図面をより印象的なものに置き換えたりできます。
図 5.1。 「ハングマン」を演奏します。 ええと...彼はどんな言葉を作りましたか?
図 5.2。 このゲームに勝った!
図 5.3。 そして、このゲームは、特に偽りの小さな男のために、最良の方法で終了しませんでした
リストを使用する
タプルのようなリストはシーケンスです。 しかし、リストは変更可能です。 それらの要素は変更可能です。 これが、リストがタプルと同じ機能を持ち、他の何かを実行できる理由です。 タプルの操作について既に知っていることはリストにも当てはまります。つまり、リストを使用することを学ぶことは難しくありません。
アーセナルオブアヒーロー3.0プログラムの知識
このプログラムは、第4章で出会った初期のゲーム「Hero Arsenal 2.0」に基づいています。ここでは、ヒーローの兵器に関するデータを保存するために、リストをタプルで使用しませんでした。 Hero Arsenal 3.0の最初の部分は、以前のバージョンと同じ結果を生成します。 そして、その中のコードはほとんど同じです。 唯一の違いは、タプルの代わりにリストが使用されることです。 図 5.4は、この最初の部分を完了した後のプログラムウィンドウを示しています。 それに続くコードは、リストの可変性とシーケンスを操作するためのいくつかの新しいテクニックの有用な結果を示しています。 プログラムのこの部分の実装が反映されます。
図 5.5。
図 5.4。 現在、ヒーローの武器はリストで表されています。 プログラムウィンドウでは、タプルが使用されたバージョン2.0で見たものとほとんど同じように見えます。
リスト作成
コードの最初の行は、インベントリ変数の値になる新しいリストを作成します。 システムは画面にリスト項目を表示します。 Hero Arsenal 2.0との唯一の違いは、リスト項目を括弧ではなく角括弧で囲み、タプルではなくリストを取得したことです。 このプログラムのコードは、ヘルパーサイト(courseptr.com/downloads)のChapter 5フォルダーにあり、このファイルの名前はhero's_inventory3.pyです。
図 5.5。 ヒーローの武器はリストであるため、その要素を追加、変更、削除できます。
# 3.0
#
# for-
inventory = [“”, “”, “”, “ ”]
print(“\n, :”)
for item in inventory:
print(item)
input(“\n Enter, .”)
len()関数をリストに適用する
次のコードは、Hero Arsenal 2.0の同じコードと文字通り一致します。 len()関数は、タプルと同じようにリストを処理します。
#
print(“ ”, len(inventory), “/-.”)
input(“\n Enter, .”)
in演算子をリストに適用する
このコードは、変更なしで以前のバージョンから借用されています。 in演算子は、タプルとリストの違いを認識しません。
# in
if “ ” in inventory:
print(“ .”)
リストの索引付け
繰り返しになりますが、バージョン2.0と比較して新しいものはありません。 前と同様にリストアイテムにアクセスするには、アイテムが配置されている位置の番号を角括弧で囲む必要があります。
#
index = int(input(“\n : “))
print(“ ”, index, “ ”, inventory[index])
スライスのリスト
スライスされたリストはスライスされたタプルと同じであると信じる準備はできていますか? 繰り返しますが、コロンを介して角括弧で開始位置と終了位置を示します。
#
start = int(input(“\n : “))
finish = int(input(“ : “))
print(“ inventory[“, start, “:”, finish, “] – ”, end=” “)
print(inventory[start:finish])
input(“\n Enter, .”)
リンクリスト
リストのリンクは、タプルのリンクと変わりません。 ここでの違いは、変数チェストを割り当てる際に、タプルではなくリストを決定したことだけです。 同じタイプのシーケンスのみが連結の対象になるため、これは小さな違いですが大きな違いです。
#
chest = [“”, “ ”]
print(“ . :”)
print(chest)
print(“ .”)
inventory += chest
print(“ :”)
print(inventory)
input(“\n\n Enter, .”)
リストの可変性
おそらく、あなたはすでに無数のフレーズにうんざりしているでしょう。その一般的な意味は、リストがタプルと同じように機能するということです。 今まで、括弧を正方形のものに置き換えることを除いて、リストはタプルと比較して新しいものであることが証明されていませんでした。 しかし、まだ違いがあり、それは巨大です。 繰り返しますが、リストは変更可能です。 したがって、リストを使用すると、タプルが不適切な多くのトリックを実行できます。
インデックスで選択されたアイテムに新しい値を割り当てる
リストは変更可能であるため、新しい値をその要素のいずれかに割り当てることができます。
#
print(“ .”)
inventory[0] = “”
print(“ :”)
print(inventory)
input(“\n Enter, .”)
inventory, 0,
“”:
inventory[0] = “”
この新しい文字列値は、前者(「剣」)を置き換えます。 印刷機能は、リストがどのように見え始めたのかを示し、それにより在庫の新しいバージョンが表示されます。
トラップ
インデックスで選択することにより、既存のリストアイテムに新しい値を割り当てることができますが、この方法で新しいアイテムを作成することはできません。 以前に存在しなかった要素に値を割り当てようとすると、エラーがスローされます。
リストスライスへの新しい値の割り当て
単一のリスト項目だけでなく、スライスにも新しい値を割り当てることができます。 インベントリ[4:6]スライスを単一アイテムリスト値[“ magic crystal”]に割り当てました。
#
print(“ , .”)
inventory[4:6] = [“ ”]
print(“ :”)
print(inventory)
input(“\n Enter, .”)
リスト内の2つのアイテム、インベントリ[4]とインベントリ[5]には、単一の文字列値「magic crystal」が割り当てられます。 シングルトンリストは2要素のスライスの値になっているため、インベントリシーケンスの長さは1つ減りました。