Python выше игра с угадайкой

Многие люди спрашивали меня, как сделать уникальный многомерный массив. Я получил ссылку с вашего комментария, и мне это помогает.

Прежде всего, спасибо @jeromegamez @daveilers для вашего решения. Но каждый раз, когда я давал ответ, они спрашивали меня, как это «сериализовать» и «неэриализовать». Вот почему я хочу поделиться с вами причиной этого, чтобы он помог большему количеству людей понять концепцию, стоящую за этим.

Я объясняю, почему мы используем «serialize» и «unserialize» в шагах:

Шаг 1: Преобразование многомерного массива в одномерный массив

To преобразовать многомерный массив в одномерный массив, сначала сгенерировать представление потока байтов всех элементов (включая вложенные массивы) внутри массива. Функция serialize () может генерировать представление байтового потока значения. Чтобы генерировать представление байтов по всем элементам, вызовите функцию serialize () внутри функции array_map () как функцию обратного вызова. Результат будет одномерным массивом независимо от того, сколько уровней имеет многомерный массив.

Шаг 2: Сделайте уникальные значения

Чтобы сделать этот одномерный массив уникальным, используйте array_unique ( ).

Шаг 3: Верните его в многомерный массив

. Хотя массив теперь уникален, значения выглядят как представление потока байтов. Чтобы вернуть его обратно в многомерный массив, используйте функцию unserialize ().

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

Еще раз спасибо за все это.

0
задан exc22 19 March 2019 в 16:48
поделиться

2 ответа

Я запустил ваш код с кучей распечаток, чтобы проверить переменные во время его выполнения. Подобное поведение и ответ был 50, поэтому первое условие - False. high было 50, и мой ответ был 50, поэтому второе условие - False. Тем не менее, average это 46, и не совпадает с моим answer, который является 50. Well played! является конечным результатом.

Измените elif answer > high: на elif answer >= high:, и вы получите ожидаемый результат. Затем измените elif answer < low: на elif answer <= low:.

0
ответ дан Keith Cronin 19 March 2019 в 16:48
поделиться

Проблема здесь в том, что для того, чтобы компьютерная программа знала, что вы дали неправильный ответ для значения (как, скажем, говоря, что «50 слишком мало», когда на самом деле ответ 50), необходимо запишите его догадки и ваши ответы на них.

Таким образом, после того, как оно сделает предположение и вы получите «более низкий» или «более высокий» ответ, вы можете поместить предположение в список low_guesses или high_guesses, а затем изучить этот список в конце игры. Вы можете получить что-то вроде этого:

low_guesses = []
high_guesses = []

while True:  # breaks out when user types "same"
    response = input("Is the number higher, lower, or the same as " + str(guess) + "? ")
    if response == "lower":
        # Add the guess to the low_guesses array:
        low_guesses.append(guess)
    elif response == "higher":
        # Add the guess to the high_guesses array:
        high_guesses.append(guess)
    else:
        # Secret number found, so break out of loop:
        break

# Outside of the loop, examine your low_guesses and high_guesses lists.

Вы можете проверить списки, убедившись, что все элементы в low_guesses меньше секретного числа и что все элементы в high_guesses больше чем секретный номер. Если это не так, вы знаете, что что-то не так.

(Также несколько советов: пожалуйста, не называйте переменные l или lst. Они настолько похожи на 1 или 1st, что затрудняют чтение вашего кода, даже когда читающие ваш код уже знают, что они представляют имена переменных .)

0
ответ дан J-L 19 March 2019 в 16:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: