Рубрики
Без рубрики

100 дверей Python Coding Choda

Решите известные 100 дверей Python Coding Code Choda. Отлично подходит для развития алгоритмического мышления и навыков программирования Python.

Автор оригинала: Robin Andrews.

В этом уроке мы собираемся посмотреть на забавный вызов кодирования в Python, называемый «100 дверей» Отказ Это отличная задача для разработки алгоритмического мышления и навыков программирования Python.

Задание

В ряду 100 дверей изначально закрываются.

Вы делаете 100 проходов в дверях.

Первый раз, когда вы посещаете каждую дверь и переключите его состояние (если дверь закрыта, вы открываете ее; если она открыта, вы его закрываете).

Второй раз, вы посещаете только 2 две двери (дверь № 2, № 4, # 6, …) и переключите его.

В третий раз вы посещаете каждую третью дверь (дверь № 3, # 6, # 9, …).

Продолжайте этот шаблон, пока вы не посетите не только на 100-й двери.

Какие двери открыты и которые закрыты после последнего прохода?

(Из Код Розетта )

В решении этой задачи вам нужно будет нарисовать несколько аспектов ваших знаний о программировании.

Например:

  • Выбор ценных бумажных типов данных
  • Использование логических переменных эффективно
  • Управляющая итерация (например, вложенные для петлей )
  • Алгоритмические навыки мышления

Решение 100 дверей кодируют вызов

Вы можете пойти на эту проблему для себя перед чтением. Я рекомендую вам сделать это, как, даже если вам не удастся, у вас будет гораздо ясную картину проблем, связанных с тем, чтобы вы следили с остальной частью этого урока.

Первое, что нужно рассмотреть, как мы будем представлять состояние дверей. Для начинающих программистов это не обязательно очевидно.

То, как я реализовал это, это использовать массив (список в Python) логии, так что

  • Истинные средства открыты
  • Ложные средства закрыты

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

Python позволяет нам создать этот список логиков с легкостью:

doors = [False] * 101 # So we can start at door 1. We will ignore index 0

С вышеуказанным кодом я ожидал проблему с подсчетом, посчитав, посчитав, посчитав информацию о списке Python от 0 Принимая во внимание, что заявление о проблеме предполагает, что первая дверь пронумерована 1 Отказ Это может вызвать когнитивное трение И есть более одного способа решения проблемы. Мой подход – просто иметь неиспользуемое значение в начале списка, и иметь 101 предметы всего, а не 100 Отказ

Далее нам нужно Итерация над списком дверей. Поскольку мы знаем количество итераций, необходимых заранее, мы используем для петля.

for i in range(1, 101):  # 101 because of how range works
    doors[i] = not doors[i]  # Using `not` to invert the Boolean value

print(doors)

Обратите внимание, как мы переключаем состояние каждой двери в вышеуказанном коде. Мы получили доступ к Двери Список с использованием Я Как индекс, и использовал логический не Оператор для инвертирования значений.

Хорошо, мы сделали один проход дверей, но это только начало. Нам нужно сделать 100 проходов, с поведением пропуска, описанным в определении проблемы.

Для достижения этого необходимо два ключевых компонента. Одним из них является использование вложенных для циклов, которые вы можете узнать больше по ссылке.

Основной пример вложенного для петля будет:

for x in range(1, 6):
    for y in range(1, 4):
        print("x:", x, "y", y)

Перед запуском этого кода вы должны тщательно подумать о том, что будет вывод. Тогда идите вперед и бегите и посмотрите, были ли вы правы.

Другой компонент – это использование шаг Значение в наших для петлей.

Например, следующий код

for i in range(1, 11, 2):
    print(i)

печатает значения 1, 3, 5, 7, 9 Отказ Это третий аргумент для Диапазон который определяет шаг. Обратите внимание, что 11 не отображается, потому что верхняя граница для Диапазон не включено.

Теперь у нас есть ингредиенты, чтобы решить проблему, есть только один финальный трюк, вам нужно будет поставить их все вместе. Это необходимо использовать внешний счетчик петлей ( I В этом случае) в качестве параметра в Диапазон внутреннего цикла. Я поставил комментарий, объясняющий, как это работает в моем решении ниже.

Решение для 100 дверей Python Coding Choda.

doors = [False] * 101  # so we can start at door 1. We will ignore index 0

for i in range(1, 101):
    # for the second pass, x = 2, so we start at door 2, for the 3rd pass we start at door 3 etc.
    for j in range(i, 101, i):
        doors[j] = not doors[j]  # using `not` to invert the Boolean value

# Print out just the positions of the open doors
for i in range(1, 101):
    if doors[i] is True:  # Or just if doors[i]:
        print(i)

Когда вы запускаете этот код, вы можете заметить, что на выходе есть четкий математический шаблон. Это может быть большой авеню для дальнейшего изучения …

В этом уроке мы узнали, как решить 100 драйверов, кодирующих вызов в Python. Я надеюсь, что вы нашли это интересно и полезно.

Счастливые вычисления!