#author("2026-07-01T07:09:11+09:00;2023-02-23T23:33:34+09:00","default:vip","vip")
#author("2026-07-02T02:47:59+09:00;2023-02-23T23:33:34+09:00","default:vip","vip")
[[問題文>練習問題#ffeaab60]]
 from random import shuffle
 N = 4
 a = list(range(1, 10))
 shuffle(a)
 a = ''.join(map(str,a[:N]))
 x = ''
 while x != a:
     hit, blow = 0, 0
     x = input(f'Input {N} digit number: ')
     for i, e in enumerate(a):
         if x[i] == e:
             hit += 1
         elif e in x:
             blow += 1
     print(f'{hit} hit, {blow} blow')

#初心者用

 import random
 
 print("数当てゲーム Hit & Blow")
 ans = []
 guess = []
 n = int(input("遊びたい桁を入力してください(1桁以上9桁以下):  "))
 n = min(max(1, n), 9)
 hit = 0
 
 '''
 # 基本的にはあまり褒められない実装。
 while len(a) != n:
     r = random.randint(1, 9)
     if r not in a:
         a.append(r)
 '''
 # random.shuffle を知らなかった場合
 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
 for i in range(n):
     idx = random.randrange(i, len(nums))
     ans.append(nums[idx])
     nums[i], nums[idx] = nums[idx], nums[i]  # swap
     picked = random.randrange(i, len(nums))
     ans.append(nums[picked])
     nums[i], nums[picked] = nums[picked], nums[i]  # swap
 
 while hit != n:
     while len(guess) != n:
         x = int(input("予想する数字を大きい桁から1つずつ入力してください:  "))
         x = min(max(1, x), 9)
         if x not in guess:
             guess.append(x)
             print(guess)
         else:
             print("同じ数は入力できません")
 
     hit, blow = 0, 0
     for i in range(n):
         if guess[i] == ans[i]:
             hit += 1
         elif guess[i] in ans:
             blow += 1
     print(f'{hit} hit, {blow} blow')
     guess = []
 print("おめでとう!")

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS