プロンプト:
次のような数字当てゲームのプログラムをPythonで作成して下さい。
ルール:
3けたの数字を当てるゲーム。
それぞれの桁の3つの数字は重複してはいけない
プログラムは、乱数で特定の3桁の数字を保持する。
ループ:
ユーザーは、プログラムの保持する数字を予想して入力する。
もしユーザーの入力した3桁の数字がプログラムの保持する数字と一致していたら、ループをぬける。
プログラムは、その予想した3桁の数字で
桁と数字が合致しているものの数nと
数字はあっているが桁が違うものの数mを
「nストライクmボール」と表示する。
# 例えば、プログラムの保持する数字が432でユーザの入力が402なら「1ストライク1ボール」
# それぞれ312と321なら「1ストライク2ボール」
「おめでとう!正解です。」と表示して終了する。
ルール:
3けたの数字を当てるゲーム。
それぞれの桁の3つの数字は重複してはいけない
プログラムは、乱数で特定の3桁の数字を保持する。
ループ:
ユーザーは、プログラムの保持する数字を予想して入力する。
もしユーザーの入力した3桁の数字がプログラムの保持する数字と一致していたら、ループをぬける。
プログラムは、その予想した3桁の数字で
桁と数字が合致しているものの数nと
数字はあっているが桁が違うものの数mを
「nストライクmボール」と表示する。
# 例えば、プログラムの保持する数字が432でユーザの入力が402なら「1ストライク1ボール」
# それぞれ312と321なら「1ストライク2ボール」
「おめでとう!正解です。」と表示して終了する。
-------
Python
import random
# ランダムな3桁の数字を生成
secret_num = [str(random.randint(0, 9)) for _ in range(3)]
# ゲームループ
strike = 0
ball = 0
while True:
# ユーザー入力を3桁のリストに変換
user_num = [str(num) for num in input("3桁の数字を入力してください: ")]
strike = 0
ball = 0
while True:
# ユーザー入力を3桁のリストに変換
user_num = [str(num) for num in input("3桁の数字を入力してください: ")]
# ストライクとボールをカウント
for i in range(3):
if user_num[i] == secret_num[i]:
strike += 1
elif user_num[i] in secret_num:
ball += 1
for i in range(3):
if user_num[i] == secret_num[i]:
strike += 1
elif user_num[i] in secret_num:
ball += 1
# ゲーム結果を表示
print(f"{strike}ストライク {ball}ボール")
print(f"{strike}ストライク {ball}ボール")
# 正解判定
if strike == 3:
print("おめでとう!正解です。")
break
if strike == 3:
print("おめでとう!正解です。")
break
Use code with caution.
説明:
説明:
random モジュールをインポートして、ランダムな数字を生成するための機能を使います。
secret_num リストに、ランダムに生成された3桁の数字を文字列として格納します。
ゲームループに入ります。
ユーザーに3桁の数字を入力させ、user_num リストに格納します。
strike と ball 変数を初期化します。
for ループで、ユーザー入力と正解数字を比較します。
一致すれば strike を1増やします。
一致しなくても、正解数字の中に含まれていれば ball を1増やします。
strike と ball の値を使って、"nストライクmボール" の形式でゲーム結果を表示します。
strike が3になったら、ユーザーが正解したことを示すメッセージを表示してループを抜けます。
補足:
secret_num リストに、ランダムに生成された3桁の数字を文字列として格納します。
ゲームループに入ります。
ユーザーに3桁の数字を入力させ、user_num リストに格納します。
strike と ball 変数を初期化します。
for ループで、ユーザー入力と正解数字を比較します。
一致すれば strike を1増やします。
一致しなくても、正解数字の中に含まれていれば ball を1増やします。
strike と ball の値を使って、"nストライクmボール" の形式でゲーム結果を表示します。
strike が3になったら、ユーザーが正解したことを示すメッセージを表示してループを抜けます。
補足:
このプログラムは、基本的な機能のみを実装しています。
より高度な機能を追加するには、以下のような改良が可能です。
制限回数を設けて、制限回数内に正解できなければゲームオーバーにする。
ヒント機能を追加する。
過去のプレイ履歴を記録する。
このプログラムは、初心者向けに分かりやすく記述されています。
ご参考になれば幸いです。
より高度な機能を追加するには、以下のような改良が可能です。
制限回数を設けて、制限回数内に正解できなければゲームオーバーにする。
ヒント機能を追加する。
過去のプレイ履歴を記録する。
このプログラムは、初心者向けに分かりやすく記述されています。
ご参考になれば幸いです。

--------
使用AI:Google Gemini / 画像生成:Microsoft Designer
使用AI:Google Gemini / 画像生成:Microsoft Designer
(注釈)
仕様書からプログラムを作成することができるかを、簡単な数当てゲームを例に試しました。
結論、どのAIも動くソースコードを作成しました。
今回採用したのはGoogle Geminiのものですが、その理由は「動くがバグがある」からです。
ストライクとボールの変数に0を代入する場所が間違っていて、くり返し数字を入力するごとにストライク数とボール数が加算されてしまいます。AIの生成したプログラムはまだ発展途上のようですが、ほとんど正解のプログラムを作ってくれるのは時間節約の点から助かります。
何故かこの対話を英訳した英語版では、しれっとソースコードのバグが修正されていました。
また、ChatGPTもMicrosoft Copilotも、関数を多用したソースコードだったのに対してGoogle Geminiは初心者でもわかりやすいソースコードでした。
仕様書からプログラムを作成することができるかを、簡単な数当てゲームを例に試しました。
結論、どのAIも動くソースコードを作成しました。
今回採用したのはGoogle Geminiのものですが、その理由は「動くがバグがある」からです。
ストライクとボールの変数に0を代入する場所が間違っていて、くり返し数字を入力するごとにストライク数とボール数が加算されてしまいます。AIの生成したプログラムはまだ発展途上のようですが、ほとんど正解のプログラムを作ってくれるのは時間節約の点から助かります。
何故かこの対話を英訳した英語版では、しれっとソースコードのバグが修正されていました。
また、ChatGPTもMicrosoft Copilotも、関数を多用したソースコードだったのに対してGoogle Geminiは初心者でもわかりやすいソースコードでした。
参考までに英語版はこちら