見出し画像

#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  #プログラミング

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