Перейти до змісту

DEMO⚓︎

Всього лиш приклад 👉🏼 Детальніше

УВАГА наведена нижче програма є лише прикладом рівня коду, який ми навчимось ЧИТАТИ ближче до кінця міні–курсу.

Хтось із вас навчиться також ПИСАТИ такого рівня складності програми (що не так і просто, як могло би здатися).

Не все у даній програмі ідельно та оптимально, код наведений суто в навчальних цілях та має ряд недоліків, які ми спробуємо освітити ближче до середини нашої продорожі.

Не перемикайтесь

Програма середнього розміру та складності⚓︎

Технічне Завдання (ТЗ)" 👉🏼 Детальніше

Суть завдання — написати програму, яка покаже деякі з можливостей мови Пайтон на практиці.

Перш ніж ми трішки ближче почнемо вивчати умовні оператори, цикли, функції та інші корисні властивості мови програмування Python.

Проста й всім відома гра 'Камінь🪨, Ножиці ✂️, Папір📜'.
Правила всім відомі, але враховуючи що в компа немає рук,
ми все вводитимемо в терміналі.

Доступні ходи людини:

  • Користувач ввів з клавіатури '0' програма має сказати "На все добре!" та вийти.

  • 'камінь' або 'к'

  • 'ножиці' або 'н'
  • 'папір' або 'п':

Програма використовує генератор випадкового вибору. Це значить копм'ютер (комп) буде обирати ходи не прогнозовано.

python examples/3_1.py
Ласкаво Прошу до гри 'Камінь🪨, Ножиці ✂️, Папір📜'

Гра відбувається до 3 очків.

Кінець гри — введіть 0
1 Ваш хід — не розпізнано
Його хід — не важливо

Ніхто не перемагає
Помилка
Рахунок(Людина=0, Комп=0)
н Ваш хід — Ножиці ✂
Його хід — Камінь🪨

Комп'ютер перемагає
Спробуй ще
Рахунок(Людина=0, Комп=1)
п Ваш хід — Папір📜
Його хід — Папір📜

Дружба перемагає
Нічия
Рахунок(Людина=0.5, Комп=1.5)
п Ваш хід — Папір📜
Його хід — Камінь🪨

Людина перемагає
Пощастило!
Рахунок(Людина=1.5, Комп=1.5)
н Ваш хід — Ножиці ✂
Його хід — Папір📜

Людина перемагає
Пощастило!
Рахунок(Людина=2.5, Комп=1.5)
к Ваш хід — Камінь🪨
Його хід — Ножиці ✂

Людина перемагає
Пощастило!
Рахунок(Людина=3.5, Комп=1.5)


Людина ПЕРЕМОГЛА Комп!!!
Вихідний код
examples/3_1.py
import sys
from random import choice
from collections import namedtuple

def start_game():
    print("\nЛаскаво Прошу до гри 'Камінь🪨, Ножиці ✂️, Папір📜'\n")
    print("Гра відбувається до 3 очків.\n")
    print("Кінець гри — введіть 0\n")

    Total = namedtuple("Рахунок", ["Людина", "Комп"])
    total = Total(0, 0)

    while total[0] <3 and total[1] <3:
        you = vvid_hodu()
        it = computer_hodyt()
        winner = ocinka_hodu(you[0], it[0])

        if winner[0] == "Людина":
            total = Total(total[0] + 1, total[1])
        elif winner[0] == "Комп'ютер":
            total = Total(total[0], total[1] + 1)
        elif winner[0] == "Дружба":
            total = Total(total[0] + 0.5, total[1] + 0.5)
        else:
            it = (-1, "не важливо")

        message = f"""\
        Ваш хід — {you[1]}
        Його хід — {it[1]}

        {winner[0]} перемагає

        {winner[1]}

        {total}

        """
        print(message)
    if total[0] >= 3 and  total[1] >= 3:
        print("WIN + WIN")
    elif total[0] >= 3:
        print("\nЛюдина ПЕРЕМОГЛА Комп!!!")
    elif total[1] >= 3:
        print("\nБуває, наступного разу пощастить більше")

def vvid_hodu()-> tuple[int, str]:
    hid = input("Ваш хід: ").lower()
    match hid:
        case '0':
            print("На все добре!")
            sys.exit()
        case 'камінь' | 'к':
            return 0, "Камінь🪨"
        case 'ножиці' | 'н':
            return 1, "Ножиці ✂"
        case 'папір' | 'п':
            return 2, "Папір📜"
        case _:
            return -1, "не розпізнано"

def computer_hodyt() -> tuple[int, str]:
      return choice([(0, "Камінь🪨"),
                     (1, "Ножиці ✂"),
                     (2, "Папір📜")])

def ocinka_hodu(n1: int, n2: int) -> tuple[str, str]:
    match n1, n2:
        case (0, 1) | (1, 2) | (2, 0):
            return "Людина", "Пощастило!"
        case (0, 0) | (1, 1) | (2, 2):
            return "Дружба", "Нічия"
        case (1, 0) | (2, 1) | (0, 2):
            return "Комп'ютер", "Спробуй ще"
        case _:
            return "Ніхто не", "Помилка"


if __name__ == '__main__':
    start_game()

Характеристики цієї програми⚓︎

Якщо ви прочитали Основи Програмування, то вам легко побачити, що дана програма:

  • приймає N вхідних рядків, які користувач набирає з клавіатури.
  • виводить дані в термінал (стандартний вивід)
  • приймає численні рішення
  • містить цикл для повторень раундів
Основні Частини Коду
High Level
import sys
from random import choice
from collections import namedtuple

def start_game():
...
def vvid_hodu()-> tuple[int, str]:
...
def computer_hodyt() -> tuple[int, str]:
...
def ocinka_hodu(n1: int, n2: int) -> tuple[str, str]:
...
if __name__ == '__main__':
  start_game()
Основна ф-я ч.1
def start_game():
  print("\nЛаскаво Прошу до гри 'Камінь🪨, Ножиці ✂️, Папір📜'\n")
  print("Гра відбувається до 3 очків.\n")
  print("Кінець гри — введіть 0\n")

  Total = namedtuple("Рахунок", ["Людина", "Комп"])
  total = Total(0, 0)

  while total[0] <3 and total[1] <3:
      you = vvid_hodu()
      it = computer_hodyt()
      winner = ocinka_hodu(you[0], it[0])

      if winner[0] == "Людина":
          total = Total(total[0] + 1, total[1])
      elif winner[0] == "Комп'ютер":
          total = Total(total[0], total[1] + 1)
      elif winner[0] == "Дружба":
          total = Total(total[0] + 0.5, total[1] + 0.5)
      else:
          it = (-1, "не важливо")
Основна ф-я ч.2
        message = f"""\
        Ваш хід — {you[1]}
        Його хід — {it[1]}

        {winner[0]} перемагає

        {winner[1]}

        {total}

        """
        print(message)
    if total[0] >= 3 and  total[1] >= 3:
        print("WIN + WIN")
    elif total[0] >= 3:
        print("\nЛюдина ПЕРЕМОГЛА Комп!!!")
    elif total[1] >= 3:
        print("\nБуває, наступного разу пощастить більше")
Допоміжні Частини Коду
Ввід ходу
def vvid_hodu()-> tuple[int, str]:
  hid = input("Ваш хід: ").lower()
  match hid:
      case '0':
          print("На все добре!")
          sys.exit()
      case 'камінь' | 'к':
          return 0, "Камінь🪨"
      case 'ножиці' | 'н':
          return 1, "Ножиці ✂"
      case 'папір' | 'п':
          return 2, "Папір📜"
      case _:
          return -1, "не розпізнано"
Хід Коп'ютера
def computer_hodyt() -> tuple[int, str]:
  return choice([(0, "Камінь🪨"),
                 (1, "Ножиці ✂"),
                 (2, "Папір📜")])
Оцінка Ходу
def ocinka_hodu(n1: int, n2: int) -> tuple[str, str]:
  match n1, n2:
      case (0, 1) | (1, 2) | (2, 0):
          return "Людина", "Пощастило!"
      case (0, 0) | (1, 1) | (2, 2):
          return "Дружба", "Нічия"
      case (1, 0) | (2, 1) | (0, 2):
          return "Комп'ютер", "Спробуй ще"
      case _:
          return "Ніхто не", "Помилка"