# Игра в простейшей форме на угадывание сортировки за минимальное # число сравнений! Игра на время, оно подсчитывется.... # Угадать надо перестановку чисел 1,2,3,4,5,6 -она прячется под ABCDEF. # Вот все возможные карточки для помощи в угадывании: # На обратной стороне карточки ответ, какая буква больше import random import time # Инициализация карточек ab = 'BA CA DA EA FA BC BD BE BF CD CE CF DE DF EF' ab1 = 'AB AC AD AE AF CB DB EB FB DC EC FC ED FD EF' ab1 = ab1.split(' ') ab = ab.split(' ') N = 6 # ИЗМЕНЕНО: теперь 6 элементов # Основные переменные numbers = [2, 3, 4, 1, 5, 6] # ИЗМЕНЕНО: добавлено число 6 abc = 'ABCDEF' # ИЗМЕНЕНО: добавлена буква F max_attempts = 7 itogo = [111, 111, 111, 111, 111] * 100 while 1: level = int(input('choose LEVEL = 1 2 3 ? ')) if not level in [1, 2, 3]: continue break if level == 1: max_attempts = 15 if level == 2: max_attempts = 12 if level == 3: max_attempts = 9 def picinit(): # КАРТИНКА НАЧАЛЬНАЯ print(''' Вот все возможные карточки для угадывания: На обратной стороне карточки ответ, какая буква больше BA CA BC DA CD BD EA DE CE BE FA EF DF CF BF ''') def quest(rr): # КАРТИНКА ТЕКУЩАЯ print("\nВсе Ваши ответы:") for i in range(len(numbers)): for j in range(i): if rr[i][j] == '?': sign = '>' if numbers[i] > numbers[j] else '<' print(f"{abc[i]} {sign} {abc[j]}") def main(): # ГЛАВНЫЕ ЦИКЛЫ - ИГРА , А В ИГРЕ - ПОПЫТКИ (ATTEMPTS) ИЛИ ХОДЫ (TOTAL MOVES) s_igry = 0 sum_igry = 0 while True: s_igry += 1 random.shuffle(numbers) # numbers = [2, 3, 4, 1, 5, 6] # ИЗМЕНЕНО: добавлено число 6 rr = [[' ' for _ in range(N)] for _ in range(N)] # ИЗМЕНЕНО: теперь матрица 6x6 attempts = 0 total_moves = 0 start_time = time.time() print("\nНовая игра! Числа: (1,2,3,4,5,6) их перемешали -> и теперь это (ABCDEF)") picinit() while attempts < max_attempts: print(f"\nОсталось попыток: {max_attempts - attempts}") print("Выберите карточку (AB, BC, CD и т.д.) или 00 для ответа") choice = input("Ваш выбор: ").upper() if choice == '00': break if choice in ab or choice in ab1: i = abc.index(choice[0]) j = abc.index(choice[1]) rr[i][j] = '?' rr[j][i] = '?' total_moves += 1 quest(rr) else: print("Неверный ввод! Попробуйте еще раз.") continue attempts += 1 #---------------------------Ввод угаданной сортировки ---------------------- while 1: answer = input("\nВведите ваш ответ (например, 231546): ") if len(answer) != N or not answer.isdigit(): # Проверка на 6 цифр print("Неверный формат ответа! - еще раз!") continue break user_answer = [int(x) for x in answer] #--------------Проверка угаданной сортировки и обработка верного угадывания--- if user_answer == numbers: end_time = time.time() elapsed = int(end_time - start_time) elapsedm = elapsed // 60 elapseds = elapsed - elapsedm * 60 print(f"\nПобеда! Вы угадали за {total_moves} ходов с {s_igry}-й игры") print(f"Время: {elapsedm:.2f} минут(ы) {elapseds:.2f} секунд ") itogo[sum_igry] = [sum_igry + 1, total_moves, s_igry, elapsedm, elapseds] sum_igry += 1 s_igry = 0 answend = input("Играть еще? (да/нет y/n): ") if answend.lower() not in ['да', 'y']: break else: print(f"\nНеверно! Правильный ответ: {numbers}") print("Еще попытка...") #---------------------------Выход из цикла игр и печать статистики------------ print("\nСпасибо за игру! Итоги:") for p in itogo: if p == 111: break print(f"\nПобеда {p[0]}: Вы угадали за {p[1]} ходов с {p[2]}-й игры") print(f"Время: {p[3]:.2f} минут(ы) {p[4]:.2f} секунд ", end='') if not (p[3]==0 and p[1]==0): print('code=', sum(p) % p[3]) if __name__ == "__main__": main()