понедельник, 3 сентября 2018 г.

Майкл Доусон - Программируем на Python, ответ на 1-ое задание 7-ой главы...

Доработайте игру "Викторина" таким образом, чтобы у каждого вопроса появился свой "номинал" - уникальное количество очков. В конце игры сумма очков пользователя должна стать равной сумме номиналов вопросов, на которые он ответил верно.

В начале я очень запутался.
Меня очень долго вводила в смущение фраза "В конце игры сумма очков пользователя должна стать равной сумме номиналов вопросов, на которые он ответил верно." Тогда просто ставим счетчик после значения score, который так же будет считать + 1 каждый раз, когда ответили верно. Будет выполняться одно условие, но тогда не будет уникальности номиналов.
Если же номинал будет разный, то мы не сможем сделать равное кол-во с очками.
В общем пришлось поломать голову.
Достал оригинал, там написано: "the players score should be the total of all the points values of the questions he or she answers correctly", то есть "очки игроков должны быть суммой очков, на которые он правильно ответил".
Интересно, я условие первоначальное один так интерпретировал, или здесь перевод на самом деле неккоректный?

По поводу номиналов. Можете убрать очки, чтобы не путаться, а можете просто добавить номиналы  в первоначальное тело программы.
Я сделал так, что после каждого ответа рандомилось число от 1 до 4 - это и будет номинал, добавляемый в общую копилку.

Майкл Доусон - Программируем на Python, ответ на 4-е задание 6-ой главы...

Напишите такую функцию computer_move(), которая сделала бы стратегию компьютера безупречной. Проверьте, можно ли создать непобедимого противника. 

Да, можно.
Поискав примеры в интернете, может кто-то уже пытался это сделать и мы возьмем его алгоритм. Их много, выделю основные.
Вот пример на С#, его мы и возьмем за основу. 
Ну а по самой теории, можно почитать здесь.

Прочитав все, мы имеем два варианта.
Либо пишем максимально разветвленную структуру в зависимости от хода человека (не сложно, но много писать).
Либо улучшаем параметр BEST_MOVES на основе вычитанной стратегии, присваивая ему значения (5, 0, 8, 6, 2, 1, 3, 7, 5) вместо (4, 0, 2, 6, 8, 1, 3, 5, 7).
После этого, я много раз пытался его победить, но не получилось. Так что может это и есть безпроигрышная стратегия.