#44 石跳びゲーム
● 問題
黒石と白石を動かすパズルです。
●●● ○○○ を ○○○ ●●● になるようにします。
途中で,黒石が消えることがあります。
stone = ['●','●','●',' ','○','○','○']
complete_stone = ['○','○','○',' ','●','●','●']
complete = False
while complete != True:
print(''.join(stone))
result = input('動かす石の位置番号を入力 ①②③④⑤⑥⑦')
num = int(result)-1
if 0 <= num <=6 :
if stone[num] == '●':
if stone[num+1] == ' ':
stone[num+1] == '●'
stone[num] = ' '
elif stone[num+1] == '○' and stone[num+2] == ' ':
stone[num+2] = '●'
stone[num] = ' '
if stone[num] == '○':
if stone[num-1] == ' ':
stone[num-1] = '○'
stone[num] = ' '
elif stone[num-1] == '●' and stone[num-2] == ' ':
stone[num-2] = '○'
stone[num] = ' '
if stone == complete_stone:
complete = True
print(''.join(stone))
print('完成!')
● 解答
黒石を隣の位置に動かそうとしたとき,黒石が消えてしまいます。黒石の処理を行っている if stone[num] == '●': ところにエラーがあると想像できます。
if stone[num+1] == ' ': で隣が空いていたら,stone[num+1] == '●' で隣を黒石に変更しようとしています。
しかし,よくみると = ではなく == となっています。
左辺の値を右辺に代入するのではなく,左辺と右辺が等しいかを判定していることになるので,隣は空いたまま,つまり,' ' ということになり,黒石が消えてしまいました。
if stone[num+1] = ' ': とif文の中を = にしたときは,SyntaxErrorが発生してメッセージで教えてくれるのですが,stone[num+1] == '●' は文法的に間違いではないので,見つけにくいエラーですね。
stone = ['●','●','●',' ','○','○','○']
complete_stone = ['○','○','○',' ','●','●','●']
complete = False
while complete != True:
print(''.join(stone))
result = input('動かす石の位置番号を入力 ①②③④⑤⑥⑦')
num = int(result)-1
if 0 <= num <=6 :
if stone[num] == '●':
if stone[num+1] == ' ':
stone[num+1] = '●' # 変更
stone[num] = ' '
elif stone[num+1] == '○' and stone[num+2] == ' ':
stone[num+2] = '●'
stone[num] = ' '
if stone[num] == '○':
if stone[num-1] == ' ':
stone[num-1] = '○'
stone[num] = ' '
elif stone[num-1] == '●' and stone[num-2] == ' ':
stone[num-2] = '○'
stone[num] = ' '
if stone == complete_stone:
complete = True
print(''.join(stone))
print('完成!')
#Python #プログラミング
この記事が気に入ったらサポートをしてみませんか?