見出し画像

#41 ライツアウト1

● 問題

点灯ゲームと言われているゲームです。問題が表示されません。

●は消灯,○は点灯です。
選択したところとその両隣の点灯・消灯が入れ替わります。
うまく選択して,すべてを点灯させれば完成です。
ライトは全部で4つ
左から順に1,2,3,4で指定します。

○○○● 
どこを変えますか?2 
●●●●
どこを変えますか?1
○○●●
どこを変えますか?4
○○○○

import random

question = ['','','','']
times = 0

for i in question:
    if random.randint(0,1) == 1:
        i = '○'
    else:
        i = '●'

print(''.join(question))

while question.count('○') != 4:
    times += 1
    pos = input('どこを変えますか?')
    num = int(pos)-1
    if 0 <= num < 4:
        if num-1 >= 0:
            if question[num-1] == '●':
                question[num-1] = '○'
            else:
                question[num-1] = '●'
        if num+1 < 4:
            if question[num+1] == '●':
                question[num+1] = '○'
            else:
                question[num+1] = '●'
        if question[num] == '●':
            question[num] = '○'
        else:
            question[num] = '●'

        print(''.join(question))

print(str(times)+'回で完成!')

● 解答

変更したのは3行です。
for i in question: で配列から要素を順番に取り出していますが,i = '○' では要素を変更することができません。
question[1] = '○' のように,配列の要素を番号(添え字といいます)で指定して,変更するようにします。

import random

question = ['','','','']
times = 0

for i in range(4): #変更
    if random.randint(0,1) == 1:
        question[i] = '○' #変更
    else:
        question[i] = '●' #変更

print(''.join(question))

while question.count('○') != 4:
    times += 1
    pos = input('どこを変えますか?')
    num = int(pos)-1
    if 0 <= num < 4:
        if num-1 >= 0:
            if question[num-1] == '●':
                question[num-1] = '○'
            else:
                question[num-1] = '●'
        if num+1 < 4:
            if question[num+1] == '●':
                question[num+1] = '○'
            else:
                question[num+1] = '●'
        if question[num] == '●':
            question[num] = '○'
        else:
            question[num] = '●'

        print(''.join(question))

print(str(times)+'回で完成!')

ライトの数を4つから増やした場合のプログラムに書きかえてみましょう。

#Python  #プログラミング

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