見出し画像

Python(Hangman)改 リスト タプルなど

lan = ("A","B","C")
for run in lan:
    print(run)
    
i = 1
for i in range (1,11):
    i+=1
    print("A")
    
ex_tuple = (1,2,3,4)
ex_tuple[0]
ex1_tuple = ("A","B")
ex1_tuple[0]

dic = {"1":"A",
       "2":"B"
       }

今回紹介したコードの一覧です!参考に

前回まで2回に分けてHangmanというゲームを使ってPythonについて学習した事をまとめたんですけど、うまく実行が出来なかったので。

今回は改善したものと前回後回しにしていた物についてまとめて行きたいと思います!!

では、前回のソースコードをもう一度見て行きましょう!!

def hangman(word):
   wrong= 0
   stages= ["",
            "________________         ",
            "|              |         ",
            "|              |         ",
            "|              o         ",
            "|            / | \       ",
            "|             / \        "
            ]
   releters= list(word)
   board= ["_"]* len(word)
   win=False
   print("ハングマンにようこそ!")
   while wrong < len(stages) -1:
       ms="一文字入力して下さい"
       ans=input(ms)
       if ans in releters:
           answear=releters.index(ans)
           board[answear]= ans    
           releters[answear]= "$"
       else:
           wrong +=1
           print("".join(board))
           x=wrong+ 1
           print("\n".join(stages[0:x]))
       if "_" not in board:
           print("あなたの勝ち!")
           print("".join(board))
       if not win:
           print("\n".join(stages[0:x]))
           print("残念!!あなたの負け!正解は{}.".format(word))

hangman("hangman")

こんな感じでした。これの実行結果は

一文字入力して下さいa

________________
残念!!あなたの負け!正解はhangman.
一文字入力して下さいs
_a_____

________________
| |

________________
| |
残念!!あなたの負け!正解はhangman.

こんな感じで、毎回”残念!!あなたの負け!正解はhangman”と出力されてしまうんですよね!まだ、終わってない!って感じなんですけど。

まず、どこを変えるのかという所なんですけど、最後の 

if "_" not in board:
       print("あなたの勝ち!")
       print("".join(board))
if not win:
       print("\n".join(stages[0:x]))
       print("残念!!あなたの負け!正解は{}.".format(word))


ここの分岐をwhileのループから出して、ループ処理にしないで良かったです。
ループ処理では、入力された文字がリストの中にあるのかどうかの判断のみで十分でその後、リストの中の状態で判断して勝ちなのか負けなのかを判断します!
この、どこまでがループの中に入れるのかを間違えていたので毎回の出力で負けと出てしまっていたんですね!

で、今回書き直したコードが

def hangman(word):
   wrong= 0
   stages= ["",
            "________________         ",
            "|              |         ",
            "|              |         ",
            "|              o         ",
            "|            / | \       ",
            "|             / \        "
            ]
   releters= list(word)
   board= ["_"]* len(word)
   win=False
   print("ハングマンにようこそ!")
   while wrong < len(stages) -1:
       ms="一文字入力して下さい"
       ans=input(ms)
       if ans in releters:
           answear=releters.index(ans)
           board[answear]= ans    
           releters[answear]= "$"
       else:
           wrong +=1
           print("".join(board))
           x=wrong+ 1
           print("\n".join(stages[0:x]))
   if "_" not in board:
       print("あなたの勝ち!")
       print("".join(board))
   if not win:
       print("\n".join(stages[0:x]))
       print("残念!!あなたの負け!正解は{}.".format(word))

hangman("hangman")

こんな感じです。大学でC言語をやる機会があって、While文をやったんですけどPythonの書き方の楽さに驚きました!
”C言語じゃーなんでこんなに書かなきゃいけないの!”って思っちゃいます。
でも、Pythonでも同じような処理を行っていると思うと、Pythonでの書き方がなんとなく理解しやすくなった気がします!

前回の改定はこんな感じで終わりにしたいと思います!
今後はランダムで文字を決めたりするような物を追加していこうと思います!これも後々まとめようと思います!

では、前回後回しにしていた
・input関数
・ループ処理
・タプル、辞書
この辺をまとめます。

input関数はユーザーが任意の文字や数字を入力するための関数です。
C言語とかの制的型付言語と違ってPythonは動的なので、前もって宣言する必要が無い点が良いですよね!!(楽をするなって感じですけど!)
具体例だと

\\C言語
int a;
scanf("%d",&a);
\\Python
input("入力")

これだけなんですよね!ほんとPythonってラクですね!

では、次にループ処理についてです。
whileについてはVol2で書いたので省略します
今回はfor文についてです!

forの構文は

lan = ("A","B","C")
for run in lan:
    print(run)

この文はリストの中のA、B、Cを順に出力します!
runはlanの中にあるイメージですね!
for文はこれだけじゃなくて、rangeを使って表す方法もあります!個人的にはこっちの方が分かり易いんじゃないかと思います!
具体的には

i = 1
for i in range (1,11):
    i+=1
    print("A")

こんな感じで書くこともできます!これでは1~11で書いて10までの出力になります!

for i in range (1,11):
    print(i)

これの出力結果は1、2、・・・10となって10までの出力を行います!
11までではなく1個マイナスにした所までなので注意が必要です!

次はリストと似たタプルと辞書についてです。
リストはミュータブルで後で変更や追加をすることが出来ますが、タプルではイミュータブルで後の変更や追加は出来ません。これが、リストとの大きな違いです!!辞書は他のリストやタプルとちょこっと違うので、いとこ位の関係です。(タプルとリストは兄弟かな?)
リストの構文は[]で囲いタプルは()で囲います!(タプルは”()”)で囲わなくても問題はありませんが囲った方が見やすいので囲った方が良いと思います)。
具体的な書き方は

ex_tuple = (1,2,3,4)
ex1_tuple = ("A","B")

こんな感じです。数字の場合は何もなしでカンマで区切るだけです。文字の場合はダブル(シングル)クオーテーションで囲います!

辞書はキーとバリューというものがありキーを使ってバリューを出力することが出来ます!この点がリストとタプルと大きく違う所ですね!(タプルもリストもインデックス値で出力することも出来ますが)辞書は波かっこ{}で囲います
具体的な書き方は

dic = {"1":"A",
       "2":"B"
       }

という感じになります。キーである数字(1、2)を入力するとバリューであるAまたはBが出力されます。

今回のコードをまとめておきます!
最初にも書いてますが

lan = ("A","B","C")
for run in lan:
    print(run)
    
i = 1
for i in range (1,11):
    i+=1
    print("A")
    
ex_tuple = (1,2,3,4)
ex_tuple[0]
ex1_tuple = ("A","B")
ex1_tuple[0]

dic = {"1":"A",
       "2":"B"
       }



 



この記事が気に入ったらサポートをしてみませんか?