# Игра в простейшей форме на угадывание сортировки за минимальное # число сравнений! Игра на время, оно подсчитывется.... # Угадать надо перестановку чисел 1,2,3,4,5,6 -она прячется под ABCDEF. # Вот все возможные карточки для помощи в угадывании: # На обратной стороне карточки ответ, какая буква больше import random, itertools import time # Основные переменные numbers = [2, 3, 4, 1, 5, 6, 7] # ИЗМЕНЕНО: добавлено число 6 abc = 'ABCDEFG' # ИЗМЕНЕНО: добавлена буква F N = 7 # ИЗМЕНЕНО: теперь 6 элементов # print(list(itertools.combinations(list('ABCDEF'),2))) # Инициализация карточек ab=[i+j for i,j in list(itertools.combinations(list(abc),2))] print(ab) ab1=[i+j for j,i in list(itertools.combinations(list(abc),2))] print(ab1) # Основные переменные max_attempts = 20 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 = 20 if level == 2: max_attempts = 15 if level == 3: max_attempts = 11 def picinit(): # КАРТИНКА НАЧАЛЬНАЯ print(''' Вот все возможные карточки для угадывания: На обратной стороне карточки ответ, какая буква больше BA CA BC DA CD BD EA DE CE BE FA EF DF CF BF GA FG EG DG CG BG ''') 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) 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,7) их перемешали -> и теперь это (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Введите ваш ответ (например, 2315467): ") 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()