Автор оригинала: Robin Andrews.
Вот a Веселая игра Отказ Играйте в это сначала с другом, если сможешь. Начните с числа между 10 и 20. Возьмите его в очередь, чтобы вычесть один или два из числа. Игрок забрать последний камень выигрывает. Убедитесь, что вы оба поступите на первом месте.
Далее исследуйте, как это работает, используя фактическую кучу камней/гальки, или если у вас нет, что угодно, где есть несколько идентичных элементов. Я закончил использовать рисовые булавки!
Есть ли выигрышная стратегия? Это зависит от того, кто начинает? Если есть выигрышная стратегия, что это за? Есть ли какие-то ситуации, когда вы не можете выиграть, если ваш оппонент использует определенную стратегию?
Проведите некоторое время, думая об этом и выполняем эксперименты. Может быть, напишите ваши результаты на бумаге и посмотрите, есть ли шаблон.
Это определенно стоит провести некоторое время думать и экспериментировать С этой игрой. Я написал ответ ниже, и вы можете раскрыть его, нажав «Show Solution». Если вы сдаетесь слишком рано, хотя вы отрицаете себе возможность укрепить свои навыки мышления, а также почувствовать удовлетворение, которое приходит, когда вы выясните такие вещи для себя.
Ключ к игре – делимость на 3 Отказ Если количество камней, оставшихся на вашем повороте, является множественным из 3 (I.E, 3, 6, 9 и т. Д.), Вы не можете выиграть, если ваш оппонент правильно воспроизводит. Если количество камней имеет оставшуюся часть 1 при разделении на 3, вы должны взять 1 камень. Если количество камней имеет оставшуюся часть 2, когда делится на 3, вы должны взять 2 камня.
Python Program для последней каменной стратегии игры
Ниже вы найдете списка кода для программы Python, которая имитает играть в эту игру против противника.
При обучении программы с Python или любым другим языком программирования, вы обязательно должны на самом деле Введите примеры кода для себя в большинстве ситуаций. Это обеспечит гораздо более эффективный опыт обучения, чем просто копирование/вставляющий код и запустить его. Для этого есть несколько причин, которые я не буду уходить в настоящее время, но принять мое слово для него и ввести в предоставленный код.
Код может или не может быть немного выше вашего уровня способности полностью понимать. Если это так, вы должны просто ввести его в любом случае. Вы обнаружите, что, по-настоящему, некоторое понимание будет продвигаться в «осмосе», а затем, когда вы запускаете код несколько раз и вернулись, чтобы посмотреть на него, вы, вероятно, найдут его намного больше смысла, чем это сделал, чтобы начать с.
Программа написана с использованием Функции И это программирование, которое вам определенно нужно освоить, если вы намерены всерьез принимать программирование всерьез, так что это хорошее место для дохода на борт. Функции называются довольно повседневным образом, как и переменные в программе (это очень важная привычка попасть в начало – не используйте имена, такие как Num и Val в Например, ваши программы, так как они не предоставляют достаточно информации для всех, кто читает код, включая вас, когда вы вернетесь к нему через некоторое время …)
Вот список кодов Python для последней каменной игры:
"""
Take the Last Stone game.
A simple console game where the player takes turns with the computer to remove 1 or two stones from a pile of stones.
The player to take the last stone wins.
Robin Andrews - https://compucademy.net
"""
import random
import os
START_NUM = 11
LEVEL = 1 # Only 1 and 2 available
if LEVEL not in [1, 2]:
raise ValueError("That level isn't available. 1 or 2 only.")
def print_title():
print(r"""
.____ __ _________ __
| | _____ _______/ |_ / _____// |_ ____ ____ ____
| | \__ \ / ___/\ __\ \_____ \\ __\/ _ \ / \_/ __ \
| |___ / __ \_\___ \ | | / \| | ( <_> ) | \ ___/
|_______ (____ /____ > |__| /_______ /|__| \____/|___| /\___ >
\/ \/ \/ \/ \/ \/
""")
def choose_player():
if random.randint(0, 1) == 0:
return "human"
else:
return "computer"
def player_turn():
global current_number
player_choice = input("Take away 1 or 2 stones? ")
while player_choice not in ["1", "2"]:
player_choice = input("Invalid input. Take away 1 or 2 stones? ")
player_choice = int(player_choice)
current_number = current_number - player_choice
print()
if current_number <= 0:
print("You win!")
def computer_turn():
global current_number
if LEVEL == 1:
computer_choice = random.randint(1, 2)
elif LEVEL == 2:
# Computer cannot win from this position if opponent plays correctly.
if current_number % 3 == 0:
computer_choice = 1 # Arbitrary as can't force win. Could be 2 as well.
elif current_number % 3 == 1:
# Move 1 stone and make the opponent lose
computer_choice = 1
elif current_number % 3 == 2:
# Move 2 stones and make the opponent lose
computer_choice = 2
current_number = current_number - computer_choice
print(f"Computer turn. The computer chooses {computer_choice}.")
print()
if current_number <= 0:
print("The computer wins!")
def play_again():
print()
return input("Would you like to play again (yes or no)? ").lower().startswith("y")
def main():
global current_number
lets_play_again = True
while lets_play_again:
current_number = START_NUM
current_player = choose_player()
print_title()
while current_number > 0:
print(f"The current number is {current_number}.")
print()
if current_player == "human":
player_turn()
current_player = "computer"
else:
computer_turn()
current_player = "human"
if not play_again():
lets_play_again = False
print()
print("Goodbye!")
if __name__ == "__main__":
main()
Вот несколько пунктов по поводу кода:
- Название печатается с использованием Ascii Art – Вы можете нажать на ссылку, чтобы узнать больше.
- Есть 2 уровня. Уровень 1 использует случайный выбор для определения движения противника, тогда как уровень 2 использует стратегия.
-
Start_numКонстанта может быть использована для изменения начального количества камней. - Существует вложенный пока цикл, чтобы разрешить повторную игру.
- Не беспокойтесь о
глобальныйОтказ Это просто делаетteake_numberДоступно по всей программе. Контекст это все: Глобальные переменные сломают интернет Отказ
Я надеюсь, что вы нашли это интересным и полезным. Если вы хотите научиться программированию Python от меня, почему бы не связаться, и мы можем обсудить вам потребности в обучении.
Счастливые вычисления!