задачі, де потрібні інтелектуальні рішення
задачі, де потрібні інтелектуальні рішення
логічні задачки
пазли
математичні задачки
стратегії в іграх
симуляція інтелекту
alphabetizequiz.py: алфавіт, треба поставити букви у алфавітному порядку
bagels.py: вгадати число, схоже на бики-корови
birthdayparadox.py: парадокс днів народження
bitmapmessage.py: (маленька) текст картинкою, через маску
calendarmaker.py: календарик
clickbait.py (не перекладено) генерує веселі клікбейти
coinflipsimulator.py симуляція підкидання монетки
conwaysgameoflife.py, Гра Життя
countdown.py зворотній відлік до вибуху
deepcave.py (маленька) генерує печеру
Є така гра, називається Minecraft.
Ця гра запускається через "лаунчер".
:::info
launcher: з англійської "to launch" --- запустити, наприклад, "to launch a rocket" --- запустити ракету.
Запускатор, запускальщик по нашому.
:::
Навіть якщо ви запускаєте гру даблкліком на робочому столі, це запускає лаунчер, з якого запускається сама гра.
Задача
Потрібно зашифрувати текст підстановкою символів. Для кожної букви алфавіту є відповідна буква шифрованого алфавіту. Наприклад, букви
replace_from = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя' "
потрібно перетворити у відповідні символи:
replace_to = "he*vd%qa ptkmj+gfx'rylzi@!ubwsc$=no"
Великі букви перетворити у маленькі, потім зробити заміну букв, а якщо якихось символів немає в першому списку, просто проігнорувати їх.
Якщо треба вийти/відмінити/перервати
Спочатку спробуйте клавішу q або Esc
Скорочено від QUIT. Вона працює як "вихід" у багатьох програмах --- в
tig, htop, less, ranger, ncdu, man, ...
Потім Ctrl-c
Хоч це такий же хоткей як "скопіювати", в лінукс терміналах він означає "перервати роботу".
Для Vim Esc :q!Enter
Це виходу з редактору Vim/Neovim. Якщо з першого разу не спрацювало, спробуйте ще кілька разів.
Інфо
У цих прикладах lst --- це якийсь список.
:::info
"Повернути" означає "перетворити у". Наприклад, якщо команда отримує список на вхід та "повертає число", то насправді вона перетворює цей список на число.
:::
Команди створення списків
lst = [...] --- створення списку і присвоєння йому імені. Замість ... треба написати елементи через кому
Умовний оператор: це конструкція
if COND1:
print("Надрукує, коли COND1 є True")
elif COND2:
print("Надрукує, коли COND1 є False, а COND2 є True")
...
elif COND3:
print("Надрукує, коли COND1 є False, COND2 є False, a COND3 є True")
...
Завдання по черепашці, де учні знайомляться з основними ідеями програмування
level 1 --- команди перетворюються у кольоровий малюнок
level 2 --- команди можна повторювати, групувати, а групи команд (процедури) можна використовувати кілька разів. А також параметризація
level 3 --- додавання інтерактиву через події та хуки
level 3.5 --- організація великого з маленького
level 3.8 --- основи руху, по формулам
level 4 --- хаотичний рух та багато черепашок
Екстра завдання:
Російська рулетка
Це класична російська рулетка, з револьвером і шестизарядним барабаном, куди вставлено один патрон.
Задача 1
Реалізувати раунд російської рулетки. Тобто при запуску програми вона пише, що "барабан крутиться", чекає 2 секунди, "натискання на курок" і результат --- мимо чи капут.
Потрібно провести 100000 ігор і визначити, яка ймовірність вижити в цій грі.
Задача 2
При старті прорама питає, скільки гравців і яким по черзі знаходитесь ви. Після цього гра йде по кругу:
Намалювати квадрат
Щоб вказати колір, потрібно зробити:
turtle.color(color1, color2)
Замість color1 та color2 треба написати якісь з кольорів:
"green", "black", "orange", "red", "white", "gray", ...
HTML формат "#FF0000", "00FFFF", "#FACE00", ...
В Пайтоні (і в C#, і в кількох інших мовах) існує поняття "генератор" та "ітератор". Вони були придумані, щоб змінити спосіб, яким пишуться програми.
Інтро, який я зроблю, буде основуватись на Факторіо, бо механізми конвеєрів дуже схожі на те, як працюють генератори "under the hood"
Факторіо, генератори та пайплайни
Producer, або початковий генератор
Тут зображено механізм, який постійно викладає на конвеєр ресурси для сайенсу. В пайтоні ми би записали це як:
import time
1. starter.py --- виконувати в терміналі
Всі завдання повинні бути виконані в один рядок. Думайте про Пайтон, як про калькулятор на стероїдах.
1.1 Степінь
Обчислити $2^{2}$
Обчислити $2021^{2}$
Обчислити $2^{2021}$
Обчислити $2021^{2021}$
Грали колись в шахи? На шаховій дошці $n = 8\times 8$ клітинок. Якщо на першу клітинку покласти 1 зернинку, на другу --- 2, на третю --- 4, на четверту --- 8, на п'яту --- 16, і так далі, на кожну наступну в два рази більше ніж на попередню, то всього на дошку буде викладено $2^{n}-1$ зернинок. Яка маса зерна в тоннах, яке викладено на шахову дошку, якщо одна зернинка важить 0.00065 кг? Це більше тисячі тон, чи менше?
Easy
def my_times(a, b)
Реалізувати множення чисел через додавання.
$$ a\times b = \sum_{i=1}^a{b}
$$
def my_power(x, p)
Реалізувати піднесення до степеня через множення
Найкращий та найповніший документ по типам даних в Пайтоні знаходиться на офіційному сайті: https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy
Числові типи (незмінні)
int
float
bool
Перетворення типів:
print(int(12.0)) # 12
print(int(12.5)) # 12
Ці алгоритми всі використовують матрицю --- двовимірний масив (як в numpy) або список списків (нативно в Пайтоні).
Іноді можна реалізувати матрицю як список рядків (але це для випадків, коли цю матрицю не потрібно буде змінювати в процесі).
В задачах (якщо не сказано іншого) потрібно повернути нову матрицю, а не змінювати матрицю на вході.
Створення матриці
Створити матрицю NxM елементів, яка складається з нулів.
In [12]: gen_matrix(10, 5)
Функція input() дозволяє отримати від юзера якийсь текст.
Функція print() дозволяє вивести якийсь текст на екран.
Функція int() перетворює рядок на число.
Приклад 1.
:::info
Завдання: отримати від юзера два числа і надрукувати їх добуток.
:::
n1 = int(input("Введи перше число: "))