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

Наборы Python и река пересекают головоломки

Узнайте о наборах Python и решайте классическую головоломку для пересечения реки. Набор в Python определяется как «неупорядоченная коллекция уникальных элементов».

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

Вы слышали о загадке о фермере, волке, козе и капусте?

Вы можете играть здесь здесь (нажмите кнопку «Запустить», чтобы начать):

Есть много разных способов реализации логики, но здесь я решил использовать Python наборы Отказ Моя цель здесь – учить о Python Programming Отказ Если вы просто хотите насладиться головоломкой, с какой-то хорошей графикой, есть несколько отличных версий на здесь на Trunsum Maths Отказ

Эта книга имеет несколько отличных примеров головоломки Python Algorithms:

Как ассортимент Amazon, я зарабатываю от квалификационных покупок.

Наборы Python

Набор в Python определяется как «неупорядоченная коллекция уникальных элементов»

Наборы менее известные, но очень полезные данные структуры данных в Python. Существует два свойства, которые делают их особенно полезными для решения определенных типов проблем.

  • Наборы – это неупорядоченный
  • Наборы не могут содержать дубликаты элементов.

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

Итак, набор, объявленный my_set = {1, 2, 2, 5} будет храниться и отображаться как {1, 2, 5} (потенциально с элементами в любом порядке).

Это различие между декларацией и представлением может привести к точном противоположным ответам на вопрос «могут содержать дубликатных элементов?» И это действительно зависит от того, что человек спрашивает на самом деле означает. Правильный ответ – нет Предполагая, что они спрашивают о фактической структуре данных.

Основные заданные операции в Python

# Create a set using set literal notation
my_set = {1, 3}

# Add an element to a set
my_set.add(2)

# Remove an element from a set
my_set.remove(1)

# find the length of a set
print(len(my_set))

# Create a set from a list
my_set = set(my_list)

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

Python устанавливает вызов

После того, как у вас будет немного практики с наборами, попробуйте решить следующую проблему: завершите определение для Соstane_duxates () который принимает список как аргумент и возвращает логический Описывание того, содержит ли список дубликатов элементов или нет.

def contains_duplicates(a_list):
        # Create a set from the argument
        # Then use it to solve the challenge....
        pass

# A couple of tests to check your function is working properly  
my_list = [1,2,2,5,7]  
print(contains_duplicates(my_list)) # True

my_list = [1,2,5,7]  
print(contains_duplicates(my_list)) # False

Python Setse Challenge Solution

def contains_duplicates(a_list):
    my_set = set(my_list)
    if len(my_list) != len(my_set):
        return True
    else:
        return False

Python версия фермера, волка, козла и капусты головоломки

Вот список кода для фермера, волка, козла и капусты в Python. Он предназначен для запуска в консоли, поэтому имеет ясно Метод очистить консоль, чтобы сохранить вещи в порядке. Вы можете предпочесть использовать бесплатную версию, но не забудьте добавить скобки к печатающим операторам, поскольку аксессуар использует Python 2.7.

"""
Wolf, Goat and Cabbage Puzzle in Python
By Robin Andrews - https://compucademy.net/
"""
import os  # Only needed in console version
import time # Only needed in console version

names = {"F": "Farmer",
         "W": "Wolf",
         "G": "Goat",
         "C": "Cabbage"}

forbidden_states = [{"W", "G"}, {"G", "C"}, {"G", "C", "W"}]


def print_story():
    print("""
#### WOLF, GOAT and CABBAGE PROBLEM ####

Once upon a time a farmer went to a market and purchased a wolf, a goat, and a cabbage. On his way home, the farmer came
to the bank of a river and rented a boat. But crossing the river by boat, the farmer could carry only himself and a single
one of his purchases: the wolf, the goat, or the cabbage.

If left unattended together, the wolf would eat the goat, or the goat would eat the cabbage.

The farmer's challenge was to carry himself and his purchases to the far bank of the river, leaving each purchase intact.
How did he do it?
""")
    input("Press enter to continue.")


def clear():
    # os.system('cls' if os.name == 'nt' else 'clear')  # Console version
    print("*" * 60, "\n")  # IDLE/Trinket version - prints page break instead of clearing screen.


def print_state(state):
    left_bank, right_bank = state
    print("#### CURRENT STATE OF PUZZLE ####")
    print()
    left_bank_display = [names[item] for item in left_bank]
    right_bank_display = [names[item] for item in right_bank]
    print(left_bank_display, "|", right_bank_display if right_bank else "[]")
    print()


def get_move():
    print("Which item do you wish to take across the river?")
    answer = ""
    while answer.upper() not in ["F", "W", "G", "C"]:
        answer = input("Just Farmer (f), Wolf (w), Goat (g) or Cabbage (c)? ")

    return answer.upper()


def process_move(move, state):
    # We need to "think ahead" to see if move is illegal.
    temp_state = [state[0].copy(), state[1].copy()]
    containing_set = 0 if move in state[0] else 1
    if "F" not in state[containing_set]:
        print("Illegal move.")
        print()
        time.sleep(1)
        return state
    if containing_set == 0:
        temp_state[0].difference_update({move, "F"})
        temp_state[1].update([move, "F"])
    elif containing_set == 1:
        temp_state[1].difference_update({move, "F"})
        temp_state[0].update([move, "F"])
    if temp_state[0] not in forbidden_states and temp_state[1] not in forbidden_states:
        state = [temp_state[0].copy(), temp_state[1].copy()]
    else:
        print("Illegal move.")
        print()
        time.sleep(1)
    print()
    return state


def is_win(state):
    return state[1] == {"F", "W", "G", "C"}


def main():
    left_bank = {"F", "W", "G", "C"}
    right_bank = set()
    state = [left_bank, right_bank]
    print_story()
    while not is_win(state):
        clear()
        print_state(state)
        move = get_move()
        state = process_move(move, state)

    print("Well done - you solved the puzzle!")


main()

Счастливые вычисления. Робин Эндрюс.