Python hitblow

python

Hit&blowゲームを作成しよう。

ルール

PCが3桁の000~999の乱数を生成する。その数字を予想する。
カンマ区切りで3つ数字を入力し、数字も位置もあっていればhit
数字はあっているが位置が違う場合にはblowとカウントされる。
この作業をくり返すことによって数を当てる。
またカンマ区切りで入力する際、数を3つ入れないと終了とみなし答えを表示する。

実行例

カンマ区切りで入力> 1,2,3
0hit 0blow
カンマ区切りで入力> 4,5,6
1hit 1blow
カンマ区切りで入力> 7,8,9
0hit 1blow
カンマ区切りで入力> 6,6,6
0hit 0blow
カンマ区切りで入力> 7,7,7
0hit 0blow
カンマ区切りで入力> 8,8,8
0hit 0blow
カンマ区切りで入力> 4,9,5
正解

途中終了の例

カンマ区切りで入力> 1,2,3
0hit 1blow
カンマ区切りで入力> 1
正解は [5, 8, 2] です

[判定例]
ans [3,4,5]
input [3,3,3] //1hit 2blow
入力した最初の3は位置も等しいのでhitとカウントされる
入力した2つ目の3は数字は使われているが位置が違うのでblowとカウントされる
入力した3つ目の3は数字は使われているが位置が違うのでblowとカウントされる
よって1hit2blow

ans[3,3,1]
input[3,1,5] //1hit 2blow
入力した3はまず位置も等しいのでhitそして数字があっているが場所が違うところにも存在しているのでblow
入力した1は数字は存在しているが位置が違うのでblow
よって1hit2blow

ans[3,3,3]
input[3,3,1] //2hit 4blow 
入力した1つ目の3はまず位置が等しいので1hit,そして位置が違うところに2つ存在しているので2blow
入力した2つ目の3はまず位置が等しいので1hit,そして位置が違う場所に2つ存在しているので2blow
よって2hit4blow

解答例

from random import randint
nums=3
ans=[randint(0,9) for i in range(nums)]
while True:
    hit=blow=0
    usr=[int(s) for s in input('カンマ区切りで入力>').split(',')]
    if len(usr) != nums:
        print('正解は',ans,'です')
        break
    for i in range(len(usr)):
        for j in range(len(ans)):
            if usr[i]==ans[j]:
                if i==j:
                    hit+=1
                else:
                    blow+=1
    if hit==nums:
        print('正解')
        break
    else:
        print('{}hit {}blow'.format(hit,blow))

コメント

タイトルとURLをコピーしました