7. Игра "Бейглз".
Условие:
Необходимо по подсказкам угадать секретное число из трёх цифр, которое загадает компьютер.
В ответ на ваши попытки угадать игра выдаёт одну из трёх подсказок:
- "Близко", если вы угадали правильную цифру на неправильном месте;
- "Совпадение", если в вашей догадке есть правильная цифра на правильном месте;
- "Мимо", если в догадке не содержится правильных цифр.
На угадывание секретного числа у вас десять попыток.
Код:
"""Игра Бейглз.
Необходимо по подсказкам угадать секретное число из трёх цифр.
В ответ на ваши попытки угадать игра выдаёт одну из трёх подсказок:
- "Близко", если вы угадали правильную цифру на неправильном месте;
- "Совпадение", если в вашей догадке есть правильная цифра на правильном месте;
- "Мимо", если в догадке не содержится правильных цифр.
На угадывание секретного числа у вас десять попыток."""
import random
def get_clues(guess, secret_num): # функция возвращает значения проверки догадки
if guess == secret_num:
return 'Число угадано'
clues = []
for i in range(len(guess)):
if guess[i] == secret_num[i]:
clues.append('Совпадение')
elif guess[i] in secret_num:
clues.append('Близко')
if len(clues) == 0:
return 'Мимо'
else:
clues.sort() # используем метод сортировки, чтобы исключить читерство
return ' '.join(clues) # создадим из списка подсказок одну строку
def get_secret_num(): # функция возвращает сгенерированное число
numbers = list('0123456789')
random.shuffle(numbers) # перемешаем цифры в списке
return numbers[0:3] # возвращаем первые три цифры в списке
def main():
print()
print("%50s" % "Игра Бейглз.\n")
print(f"""Условие игры:
- компьютер загадывает трехзначное число;
- у пользователя будет {MAX_GUESSES} попыток отгадать его;
- компьютер отвечает "Близко", если вы угадали правильную цифру на неправильном месте;
- компьютер отвечает "Совпадение", если в вашей догадке есть правильная цифра на правильном месте;
- компьютер отвечает "Мимо", если в догадке не содержится правильных цифр.
""")
while (answer := input('Желаете играть? y/n: ')) == 'y': # основной цикл игры
secret_num = get_secret_num() # секретная переменная, кот. генерирует отдельная функция
print('Число загадано.')
print()
num_guesses = 1 # счётчик догадок, который будем копить в цикле
while num_guesses <= MAX_GUESSES: # цикл, который переберает все попытки
guess = ''
while len(guess) != NUM_DIGITS or not guess.isdecimal(): # цикл проверяет на ввод догадку, сколько символов в ней и состоит ли догадка из цифр
guess = input(f'Попытка {num_guesses}: ')
print(get_clues(guess, secret_num))
num_guesses += 1
if [i for i in guess] == secret_num: # условие прерывания цикла со счётчиком догадок
print(f"""
Победа!!!
""")
break
if num_guesses > MAX_GUESSES:
print(f"""
Game over.
Вы исчерпали все попытки.
Вы не угадали число {"".join(secret_num)}.
""")
NUM_DIGITS = 3 # количество цифр в числе
MAX_GUESSES = 10 # количество попыток
if __name__ == '__main__':
main()