Pythonでとなりの県(けん)をこたえるゲームをつくる

ステップ1:もんだいをつくる

まず、ゲームでつかう都道府県(とどうふけん)のデータを作ります。

「にほんちず ひらがな」をネットでけんさくして、データをつくりましょう。

はじめは5つぐらいにして、あとからふやしましょう。

いちばんひだりにかいてあるけんのとなりのけんがそのみぎにかいてあります。

ほかのやりかたとして、AIにつくってもらうこともできます。

つぎのようにおねがいしてみましょう。

各都道府県のとなりの都道府県の一覧データをPythonの辞書形式で作って。都道府県の名前はひらがなにして。

ただし、AIのこたえがただしいかどうかはわかりません。

じぶんでかくにんしましょう。


prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

print(prefectures)

作ったデータががめんにでればいいです。


ステップ2:もんだいをだすじゅんび

いちばんひだりにかいてあるけんのなまえをとりだして、もんだいをだすじゅんびをしましょう。


prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

# いちばんひだりにかいてあるけんのなまえをとりだす
prefecture_names = list(prefectures.keys())

# とりだしたものをがめんにだす
print(prefecture_names)

もんだいとしてだしたい、けんのなまえがでれば、いいです。


ステップ3:もんだいをでたらめ(ランダム)にだす


import random

prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

prefecture_names = list(prefectures.keys())

# もんだいのじゅんばんをかえる
random.shuffle(prefecture_names)

# じゅんばんをかえたもんだいをだす
print(prefecture_names)

もんだいのじゅんばんがかわればいいです。


ステップ4:こたえをいれるようにする

こたえをいれられるようにしましょう。

まだ、こたえがただしいかは、しらべません。


import random

prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

prefecture_names = list(prefectures.keys())
random.shuffle(prefecture_names)

# もんだいを1つずつだして、こたえをいれる
for pref in prefecture_names:
    print(f"『{pref}』のとなりのけんはどこかな?")
    # ここでにんげんのこたえをうけとる
    user_input = input("こたえをにゅうりょくしてね: ")
    print(f"きみのこたえ: {user_input}\n")
    # このあとのステップでこたえあわせをする

もんだいがでたあと、こたえをいれられるようになれば、いいです。


ステップ5:こたえあわせをするじゅんび

にんげんがいくつかのけんをまとめてこたえます。

そのいくつかのけんを、くぎっていれてもらわないと、こたえあわせができません。

なので、こたえをいれるときに、ぜんかくスペース(はばがおおきいスペース)でくぎっていれるようにしましょう。


import random

prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

prefecture_names = list(prefectures.keys())
random.shuffle(prefecture_names)

for pref in prefecture_names:
    print(f"『{pref}』のとなりのけんはどこかな?")
    print("いくつでもいいよ。ぜんかくスペースでわけてね(例:とうきょうと かながわけん)")
    user_input = input("こたえをにゅうりょくしてね: ")
    print(f"きみのこたえ: {user_input}\n")

いれたこたえが、がめんにでればいいです。


ステップ6:こたえをいれたあとに ただしいこたえをだす


import random

prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

prefecture_names = list(prefectures.keys())
random.shuffle(prefecture_names)

for pref in prefecture_names:
    print(f"『{pref}』のとなりのけんはどこかな?")
    print("いくつでもいいよ。ぜんかくスペースでわけてね(例:とうきょうと かながわけん)")
    user_input = input("こたえをにゅうりょくしてね: ")
    print(f"きみのこたえ: {user_input}")

    # ただしいこたえをだす
    correct_answers = prefectures[pref]
    print(f"せいかいはこれだよ: {' '.join(correct_answers)}\n")

ただしいこたえがでればいいです。


ステップ7:いれたこたえが ただしいか しらべる

いれたこたえが、ただしいこたえとおなじか、しらべるために、setというものをつかいます。

これをつかうと、いいことがあります。

いれたこたえとただしいこたえのけんのじゅんばんがちがっていても、おなじものだとわかる。

いれたこたえとただしいこたえのどこがちがっているか、かんたんにしらべられる。


import random

prefectures = {
    'とうきょうと': ['かながわけん', 'さいたまけん', 'ちばけん', 'やまなしけん'],
    'かながわけん': ['とうきょうと', 'やまなしけん', 'しずおかけん'],
    'さいたまけん': ['とうきょうと', 'ぐんまけん', 'とちぎけん', 'いばらきけん', 'ながのけん', 'やまなしけん', 'ちばけん'],
    'ちばけん': ['とうきょうと', 'いばらきけん', 'さいたまけん'],
    'しずおかけん': ['かながわけん', 'やまなしけん', 'ながのけん', 'あいちけん']
}

prefecture_names = list(prefectures.keys())
random.shuffle(prefecture_names)

for pref in prefecture_names:
    print(f"『{pref}』のとなりのけんはどこかな?")
    print("いくつでもいいよ。ぜんかくスペースでわけてね(例:とうきょうと かながわけん)")
    user_input = input("こたえをにゅうりょくしてね: ")
    print(f"きみのこたえ: {user_input}")

    correct_answers = set(prefectures[pref]) # ただしいこたえをsetにかえる
    user_answers = set(user_input.split(' ')) # いれたこたえをぜんかくスペースでくぎってsetにかえる

    # しらべる
    if user_answers == correct_answers:
        print("やったね!せいかい!\n")
    else:
        print("ざんねん!ちがうよ。\n")

        # たりないものがあるかチェック
        missing_answers = correct_answers - user_answers
        if missing_answers:
            print(f"たりないものがあります: {' '.join(missing_answers)}")

        # よぶんなものがあるかチェック
        extra_answers = user_answers - correct_answers
        if extra_answers:
            print(f"よぶんなものがあります: {' '.join(extra_answers)}")

        print(f"せいかいはこれだよ: {' '.join(list(correct_answers))}\n")

つぎのステップへのヒント

せいかいしたかずをがめんにだしてみましょう。

もんだいがむずかしいとおもったら、となりのけんを1つだけこたえればいいようにしましょう。

または、こたえのはじめの1もじをヒントとしてがめんにだしましょう。

しりとりをするように、となりのけんをつづけてこたえるゲームにかえてみましょう。