この記事の練習問題で使用する知識:
レッスン1の知識、比較演算子と論理演算子、条件分岐(if-else文)、条件分岐(elif文)、条件分岐(match文)、繰り返し処理(for文)、繰り返し処理(while文)、繰り返しの制御、エラーメッセージ、例外処理の基礎
Pythonのゲームコード一覧はこちら
<<前の問題 | 問題集Top |
次の問題>> |
練習問題2-☆1:ハイアンドロー ゲームを作ろう
プレイヤーとコンピュータがランダムに引いたトランプのカードを比較し、どちらが大きいかを予想するハイアンドローゲームを作成しましょう。
プレイヤーは自分のカードの数字がコンピュータのカードより大きいか小さいかを予想し、結果を確認します。
条件分岐と入力処理を活用して、ゲームのロジックを作りましょう。
この問題の要件
以下の要件に従ってコードを完成させてください。
- モジュールのインポート:
random
モジュールをインポートすること。 - カードの配布:
player_card
およびcomputer_card
という2つの変数を使用し、それぞれに1から13のランダムな数字を代入すること。 - プレイヤーの予想: プレイヤーがコンピュータのカードが自分のカードより「大きい」か「小さい」かを入力できるようにすること。
- 結果の表示: プレイヤーとコンピュータのカードを表示し、条件分岐を使って、プレイヤーの予想が当たったかどうかを表示すること。
- 引き分けの処理: 同じ数字だった場合は「引き分け」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
=== ハイアンドローゲームへようこそ! === 【プレイヤー】7 VS ??【コンピュータ】 あなたのカードはコンピュータのカードより大きい?小さい? 1: 大きい、2: 小さい ⇒ 2 【プレイヤー】7 VS 5【コンピュータ】 正解!あなたの勝ち!
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:Randomモジュールのインポート
2:「ハイアンドローゲームへようこそ!」と出力
3:変数player_cardにRandomモジュールで作成した数値を代入
4:変数computer_cardにRandomモジュールで作成した数値を代入
5:f文字列を使ってプレイヤーのカードと「VS ??」を出力
6:「あなたのカードはコンピュータのカードより大きい?小さい?」と出力
7:「1: 大きい、2: 小さい」と出力
8:inputを使ってプレイヤーの選択を取得し、変数choiceに代入
9:f文字列を使ってプレイヤーとコンピュータのカードを出力
10:if文にてプレイヤーとコンピュータのカードが同じかを判定
□「引き分け!」と出力
11:elif文にてプレイヤーの選択が正しいか判定
□「正解!あなたの勝ち!」と出力
12:else文
□「残念!あなたの負け!」と出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import random # ハイアンドローゲーム開始メッセージ print("=== ハイアンドローゲームへようこそ! ===") # プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る """ 【穴埋め問題1】 ここにプレイヤーとコンピュータにそれぞれランダムなカードを配るコードを書いてください。 """ # プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない print(f"【プレイヤー】{player_card} VS ??【コンピュータ】") # プレイヤーにコンピュータのカードが大きいか小さいかを予想させる print("あなたのカードはコンピュータのカードより大きい?小さい?") print("1: 大きい、2: 小さい") """ 【穴埋め問題2】 ここにプレイヤーが予想を入力し、その入力を数値に変換するコードを書いてください。 """ # コンピュータのカードを表示 print(f"【プレイヤー】{player_card} VS {computer_card}【コンピュータ】") # 勝負の結果を判定 """ 【穴埋め問題3】 ここにif文を使って、引き分けや勝敗を判定し、それぞれの結果を表示するコードを書いてください。 """
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
import random # ハイアンドローゲーム開始メッセージ print("=== ハイアンドローゲームへようこそ! ===") # プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る player_card = random.randint(1, 13) computer_card = random.randint(1, 13) # プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない print(f"【プレイヤー】{player_card} VS ??【コンピュータ】") # プレイヤーにコンピュータのカードが大きいか小さいかを予想させる print("あなたのカードはコンピュータのカードより大きい?小さい?") print("1: 大きい、2: 小さい") choice = int(input("⇒ ")) # コンピュータのカードを表示 print(f"【プレイヤー】{player_card} VS {computer_card}【コンピュータ】") # 勝負の結果を判定 if player_card == computer_card: print("引き分け!") elif (player_card < computer_card and choice == 1) or (player_card > computer_card and choice == 2): print("正解!あなたの勝ち!") else: print("残念!あなたの負け!")
正解コードの解説
ブロック毎に分けてコードを解説します。
ランダムモジュールのインポート
import random
最初にrandom
モジュールをインポートしています。これを使って1から13までのランダムな数字を生成します。
ゲーム開始メッセージの表示
print("=== ハイアンドローゲームへようこそ! ===")
この行では、ゲーム開始時に「ハイアンドローゲームへようこそ!」というメッセージを画面に表示します。
プレイヤーとコンピュータにランダムなカードを配布
player_card = random.randint(1, 13) computer_card = random.randint(1, 13)
random.randint(1, 13)
は1から13までのランダムな整数を生成します。
プレイヤーとコンピュータそれぞれに1枚ずつランダムなカードを配布しています。
プレイヤーのカードを表示し、コンピュータのカードは隠す
print(f"【プレイヤー】{player_card} VS ??【コンピュータ】")
この行ではプレイヤーのカードを表示し、コンピュータのカードはまだ表示せず「??」として隠しています。
プレイヤーに予想を入力させる
print("あなたのカードはコンピュータのカードより大きい?小さい?") print("1: 大きい、2: 小さい") choice = int(input("⇒ "))
ここではプレイヤーにコンピュータのカードが「大きい」か「小さい」かを予想させます。
プレイヤーの入力はinput()
で受け取り、int()
を使って整数に変換しています。
コンピュータのカードを表示
print(f"【プレイヤー】{player_card} VS {computer_card}【コンピュータ】")
この行でプレイヤーとコンピュータのカードを両方表示します。ゲーム結果を次の処理で判定します。
勝敗を判定
if player_card == computer_card: print("引き分け!") elif (player_card < computer_card and choice == 1) or (player_card > computer_card and choice == 2): print("正解!あなたの勝ち!") else: print("残念!あなたの負け!")
ここでは条件分岐を使用して勝敗を判定しています。
もしプレイヤーとコンピュータのカードが同じなら「引き分け」と表示し、それ以外の場合はプレイヤーの選択に基づいて勝敗を表示します。
まとめ
このプログラムではランダムなカードを配布し、プレイヤーがカードの大小を予想するハイアンドローゲームを作成しています。
if
文を使った条件分岐や、random
モジュールを使った乱数生成が学べます。
Pythonのゲームコード一覧はこちら
<<前の問題 |
問題集Top |
次の問題>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。