#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 #プログラミング
この記事が気に入ったらサポートをしてみませんか?