見出し画像

#40 宝さがし

● 問題

宝さがしゲームです。エラーが発生します。

①②③④⑤⑥のどこかに★(宝)が隠されているので,番号を指定して当てるゲームです。
●(ボム)も隠されているので,それを指定しないようにしましょう。
★(宝)を見つけるごとにレベルが上がり,●(ボム)の数が1つずつ増えます。

①②③④⑤⑥ 2(②に★(宝)があると予想して2を入力する)
①○③④⑤⑥ 3(②は○(空)だったので,③と予想する)
①○○④⑤⑥ 4(③も○(空)だったので,④と予想する)
見つけた!
○○○★●○ (④に★(宝),⑤に●(ボム)でした)

レベルが上がる(●(ボム)の数が2つになる)

①②③④⑤⑥ 6
①②③④⑤○ 4
ボカーン!
○●○●★○

import random

def set_star_bomb():
    if level < 5:
        level += 1
    star_bomb[0] = '★'
    for i in range(1,level+1):
        star_bomb[i] = '●'
    random.shuffle(star_bomb)

level = 0
bomb = 0

star_bomb = ['○']*6
position = ['①','②','③','④','⑤','⑥']
set_star_bomb()

while bomb == 0:
    pos = input(''.join(position))
    num = int(pos)-1
    if 0 <= num < len(star_bomb):
        position[num] = '○'
        if star_bomb[num] == '●':
            print('ボカーン!')
            print(''.join(star_bomb))
            bomb = 1
        if star_bomb[num] == '★':
            print('見つけた!')
            print(''.join(star_bomb))

            star_bomb = ['○']*6
            position = ['①','②','③','④','⑤','⑥']
            set_star_bomb()

● 解答

UnboundLocalErrorが発生します。
def set_star_bomb(): として,自前の関数を利用していますが,この関数内の if level < 5: でエラーになっています。
level = 0 と初期化しているですが,def set_star_bomb():の中でないので 関数set_star_bomb()としては,いきなり levelが5より小さいか判断しなさいといわれても,そもそもLevelが何なのかわからないということです。
global level とすることで,set_star_bomb()の外で初期化された変数をset_star_bomb()内で使いことができるようになります。

import random

def set_star_bomb():
    global level # 追加 
    if level < 5:
        level += 1
    star_bomb[0] = '★'
    for i in range(1,level+1):
        star_bomb[i] = '●'
    random.shuffle(star_bomb)

level = 0
bomb = 0

star_bomb = ['○']*6
position = ['①','②','③','④','⑤','⑥']
set_star_bomb()

while bomb == 0:
    pos = input(''.join(position))
    num = int(pos)-1
    if 0 <= num < len(star_bomb):
        position[num] = '○'
        if star_bomb[num] == '●':
            print('ボカーン!')
            print(''.join(star_bomb))
            bomb = 1
        if star_bomb[num] == '★':
            print('見つけた!')
            print(''.join(star_bomb))

            star_bomb = ['○']*6
            position = ['①','②','③','④','⑤','⑥']
            set_star_bomb()
①②③④⑤⑥2
①○③④⑤⑥3
①○○④⑤⑥4
見つけた!
○○○★●○
①②③④⑤⑥6
①②③④⑤○4
ボカーン!
○●○●★○

#Python  #プログラミング

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