UdemyでPythonを勉強した結果を残すブログ。

40歳でプログラミング始めて転職までいけるのかを実録してみます。

DAY 12 : Scopeを学びつつ数字あてゲームをプログラミングする!

DAY12は数字当てゲームを作る。

 

その前にScopeについての勉強があって、

変数を定義する時、pythonではインデントされたものは

同じインデント部分以下でしか使えない。

例えば数字当てゲームのコードからいうと

 

import random
EASY = 5
HARD = 10

def select_mode():
mode = input("モードを選んでください。 easy or hard : ")
if mode == "easy":
return EASY
else:
return HARD

 

このEASYとHARDはインデントがないので全てのファンクションから引っ張ってこれるが、

mode =

の部分はselect_mode()の部分でしか基本的には使えない。

return modeにしたら結果は使えるけど、mode を変更することはできない。

 

そんな感じ。javascriptとか他の言語では使えたりする場合もあるけど、

気づかずに同じ変数で定義しちゃった時とかおかしくなるのでいい機能なのかもしれない。

 

 

数字あてゲームに入る。

 

1・1-100の数字をコンピューターがランダムで取得し、それを当てる。

 ・間違えていい回数を難易度として選べる。5回だとハード、10回だとイージー

 

2・回数をセットして、回数分数字を選べる。

 ・答えより高い場合は高い!低い場合は低い!とヒントを出す。

 ・残り回数を1減らす。

 

3・残り回数があるうちに数字をあてたら勝ち、あてられなかったら負け。

 

4・もう一回やるか聞く。

 

 

ではコーディングへ。

 

 

1・1-100の数字をコンピューターがランダムで取得し、それを当てる。

 ・間違えていい回数を難易度として選べる。5回だとハード、10回だとイージー

 

import random
EASY = 5
HARD = 10

def select_mode():
mode = input("モードを選んでください。 easy or hard : ")
if mode == "easy":
return EASY
else:
return HARD

answer = random.randint(1, 100)

 

easyを入力したら EASY、5が返ってきて、

それ以外だとHARD、10にする。

このEASYとHARDは簡単に変えていい部分としてトップにもってきている。

 

answerはrandomをインポートして整数をランダムで取得。

 

次。

 

2・回数をセットして、回数分数字を選べる。

 ・答えより高い場合は高い!低い場合は低い!とヒントを出す。

 ・残り回数を1減らす。

 

print("数字当てゲームへようこそ。!\n"
"1~100の中からこちらが用意した数字を当ててください。")
mode_num = int(select_mode())
print(f"あなたは {mode_num} 回解答できます。")

 

mode_numはselect_modeで返された5、または10をintで数値として変換してから

使う。

 

for n in range(mode_num):
print(f"残り {mode_num} ")
guess = int(input("数字を予測してください。: "))
if guess < answer:
print("低い!")
mode_num -= 1
elif guess > answer:
print("高い!")
mode_num -= 1
elif guess == answer:
print("正解!")
break

 

mode_num = 5 なので、5回分をfor で回す。

そのうちで正解したら、breakでfor を停止する。

 

 


3・残り回数があるうちに数字をあてたら勝ち、あてられなかったら負け。

if mode_num > 0:
print("あなたの勝ち!")
else:
print("あなたの負け!")

 

forが終わった時点で残り回数が0以上なら勝ち、0なら負けと出力。

 

 


4・もう一回やるか聞く。

数字当てゲームへようこそ…からあなたの負け!までを

def game():

としてファンクションにして、whileで全体を回すようにする。


is_over = True
while is_over:
game()
if input("もう一回する? y / n : ") == "n":
is_over = False

 

ソース全体はこちら。

 

import random
EASY = 5
HARD = 10

def select_mode():
mode = input("モードを選んでください。 easy or hard : ")
if mode == "easy":
return EASY
else:
return HARD

def game():
print("数字当てゲームへようこそ。!\n"
"1~100の中からこちらが用意した数字を当ててください。")
answer = random.randint(1, 100)
mode_num = int(select_mode())
print(f"あなたは {mode_num} 回解答できます。")

for n in range(mode_num):
print(f"残り {mode_num} ")
guess = int(input("数字を予測してください。: "))
if guess < answer:
print("低い!")
mode_num -= 1
elif guess > answer:
print("高い!")
mode_num -= 1
elif guess == answer:
print("正解!")
break

if mode_num > 0:
print("あなたの勝ち!")
else:
print("あなたの負け!")


is_over = True
while is_over:
game()
if input("もう一回する? y / n : ") == "n":
is_over = False

 

この日は復習は自分で全て書けた。上達。

(数字あてのfor部分は先生はwhileで回していたり比較部分もdefにしていたけど)