#49 同じ?違う?
● 問題
5つの異なる数字が2組表示されます。
2組の数字の組み合わせが同じか違うかを判断します。
5問出題されるので,なるべく早く判断しましょう。
不正解の場合には,20秒のペナルティになります。
問題がいつも同じ数字の並びになっています。また,正しく判定されていません。
import random
import time
number = [1,2,3,4,5,6,7,8,9]
miss = 0
time_start = time.time()
for n in range(5):
random.shuffle(number)
question1 = number[:5]
question2 = question1
set_question = random.randint(0,1)
if set_question == 0:
question2[4] = number[5]
random.shuffle(question1)
random.shuffle(question2)
while True:
result = input(f'{question1[:5]} - {question2[:5]} 同じ(1),違う(0)?')
if result in ['0','1']:
break
if result == '1' and set_question == 1:
print('正解')
elif result == '0' and set_question == 0:
print('正解')
else:
print('不正解')
miss += 1
time_end = time.time()
t = round(time_end-time_start+miss*20,1)
print('=====================================')
print(f'正解数:{5-miss},不正解数:{miss}')
print(f'かかった時間:{t}秒')
● 解答
問題の数字が同じということは,question1 と question2 の設定に問題がありそうです。
random.shuffle(number)で1~9の数字をシャッフルし,question1 = number[:5] で5つの数字を取り出します。
question2 = question1 で question1と同じ数字をquestion2にコピーします。
random.shuffle(question1) と random.shuffle(question2) でそれぞれの配列をシャッフルすることで,同じ数字ですが並び方が変わるはずなのですが,出力結果は全く同じ並びになっています。
question2 = question1 とすると,question1 の配列が question2 の配列にコピーされるのではなく,question1 と question2 が同じ配列として扱われるということになります。
そのため,question1の配列を操作すると,question2の配列の中身も同じように操作されるのです。
question2 = question1.copy() とすると,question1の配列の中身だけをquestion2にコピーすることができます。このとき,question1とquestion2は互いに影響を受けません。
import random
import time
number = [1,2,3,4,5,6,7,8,9]
miss = 0
time_start = time.time()
for n in range(5):
random.shuffle(number)
question1 = number[:5]
question2 = question1.copy() #修正
set_question = random.randint(0,1)
if set_question == 0:
question2[4] = number[5]
random.shuffle(question1)
random.shuffle(question2)
while True:
result = input(f'{question1[:5]} - {question2[:5]} 同じ(1),違う(0)?')
if result in ['0','1']:
break
if result == '1' and set_question == 1:
print('正解')
elif result == '0' and set_question == 0:
print('正解')
else:
print('不正解')
miss += 1
time_end = time.time()
t = round(time_end-time_start+miss*20,1)
print('=====================================')
print(f'正解数:{5-miss},不正解数:{miss}')
print(f'かかった時間:{t}秒')
#Python #プログラミング
この記事が気に入ったらサポートをしてみませんか?