Код:
input('Купи слона! ')
while True:
input('всі так кажуть, а ти купи слона! ')
Після публікації даної версії програми, Pavlo Slavynskyy запропронував ще цікавішу:
Код:
# Версія Pavlo Slavynskyy
response = input('Купи слона! ')
while True:
response = input(f'Всі кажуть "{response}", а ти купи слона! ')
Традиційно у відкритій шкільній олімпіаді з програмування, що я проводжу кожного року, беруть участь не лише учні, а також студенти та учні інших шкіл. І кожного року є свої сюрпризи, нові імена і дух змагання. Олімпіада традиційно проходить на платформі e-olymp.com на чистих акаунтах. Під час олімпіади можна користуватися help-системою мови програмування. Через те, що навчальний рік тільки розпочався і деякі учні позабували синтаксис, можна користуватися довідниками мови Python.
Приємно, що завантажені навчанням студенти-випускники школи кожного року мотивують молодь своїми гарними результатами по принципу «Навчайтеся, і ви також все це зможете зробити». Цього року у відкритій шкільній олімпіаді взяли участь студенти-айтішники КПІ, Львівської політехніки, НАУ. А студентка медичного факультету університету ім. Богомольця журилася, що «забула увесь Пайтон» але при цьому не забула математику і вивела формулу для однієї з задач.
В даній статті хочу звернути увагу на задачу «Байтик і шахи» (https://www.e-olymp.com/uk/problems/8659).
Нескладна задача, що має на e-olymp.com рейтинг складності лише 12%.
Ось умова:
Байтик та шахи
Якось, вкотре запізнившись на урок, Байтик, проходячи повз ігрову кімнату, помітив шахову дошку. Порахував усі клітинки на ній, і йому стало цікаво: скільки різних квадратів зі стороною k (1≤ k ≤ n) можна розмістити на дошці розміру n.
Вхідні дані:
Натуральне число n (n ≤ 10000) розмір шахової дошки.
Вихідні дані:
Єдине число – кількість різних квадратів, які можна розмістити на шаховій дошці.
Приклад вхідних даних: 3
Приклад вихідних даних: 14
Логічними міркуваннями, листочком і олівцем можна легко знайти кілька окремих випадків. Наприклад, при n=1 очевидно, що кількість різних квадратів – 1. При n=2, тобто дошці 2 на 2 клітинки, квадратів буде п’ять, чотири малих і один загальний, що вміщує в себе чотири малих.
При n =3 відповідь - 14. Це можна порахувати вручну або просто подивитися тестовий приклад в умові задачі.
Давайте складемо табличку:
n
|
1
|
2
|
3
|
4
|
результат
|
1
|
5
|
14
|
|
Тут можна побачити класичну задачу з розділу динамічного програмування. Кожне наступне число-відповідь, це n в квадраті плюс відповідь від попереднього n. Відповідно, для n=4, відповідь буде 4*4 + 14 = 30.
На Python це буде, наприклад, так:
n = int(input())
s = 0
for x in range(1, n+1):
s += x**2
print(s)
Я попросив у учнів дозволу переглянути код їх розв’язків. І здивовано побачив такий розв’язок цієї задачі:
n = int(input())
print('{:.0f}'.format((n*(n+1)*(2*n+1))/6))
Це студентський розв’язок. КПІ, 1 курс, прикладна математика. Питаю: «звідки формула»?
Почув відповідь: «Це квадратне пірамідальне число. Нам тиждень тому пояснював це викладач матану. Це не було темою, це він відповідав на запитання під час ZOOM-лекції».
Мабуть, якщо йти вчитися, то на правильну спеціальність правильного університету. Тому що в такому місці за допомогою самоосвіти і викладачів можна системно і послідовно навчитися серйозним речам.
Де замість циклу використовують формулу. Згадують її або виводять з голови. Там, де неоптимально – це погано, і внутрішня освіта за таке сварить. Де олімпіадний принцип «здати у відведений час» - це недостатньо. Тому що і на співбесідах і на роботі — інші критерії.
Можливо, гарна вища айтішна освіта – це коли в голові не розкидані сторінки різних класних книжок, а більш-менш серйозна бібліотека?
Як Ви вважаєте?
Тридцять чотири рядки коду на Python.
Код писав я — можете скопіювати собі і запустити.
Вийшла така картина. Я назвав її «Місто». При наступному запуску буде інша картина.
Філософське запитання: як ви вважаєте, хто автор даної роботи — автор коду, той, хто запустив код на виконання чи комп'ютер?
Код:
# City. Code: ttolich (pletyvo.in.ua). Colors: flatuicolors.com
from random import randint, choice
import tkinter
size = 800
root = tkinter.Tk()
colors = (['#1abc9c', '#2ecc71', '#3498db', '#9b59b6', '#34495e',
'#16a085', '#27ae60', '#2980b9', '#8e44ad', '#2c3e50',
'#f1c40f', '#e67e22', '#e74c3c', '#ecf0f1', '#95a5a6',
'#f39c12', '#d35400', '#c0392b', '#bdc3c7', '#7f8c8d'])
canvas = tkinter.Canvas(root, width=size, height=size, bg=choice(colors))
canvas.pack()
count = 0
while count < 1000:
color = choice(colors)
x0 = randint(0, size) + randint(0, size/2)
y0 = randint(0, size)
if 600 < y0 < 800:
d1 = randint(0, size/5) + 50
d2 = randint(0, size/5) + 100
canvas.create_rectangle(x0, y0, x0 + d1, y0 + d2, fill=color)
elif 400 < y0 < 600:
d1 = randint(0, size/10) + 20
d2 = randint(0, size/10) + 50
canvas.create_rectangle(x0, y0, x0 + d1, y0 + d2, fill=color)
elif 200 < y0 < 400:
d1 = randint(0, size/20) + 5
d2 = randint(0, size/20) + 10
canvas.create_rectangle(x0, y0, x0+d1, y0 + d2, fill=color)
elif 100 < y0 < 200:
d1 = randint(0, size/40) + 2
d2 = randint(0, size/40) + 5
canvas.create_rectangle(x0, y0, x0+d1, y0 + d2, fill=color)
root.update()
count += 1
На початку вересня пройшли традиційні екзамени з логіки на гурток з програмування. Учні, що здавали екзамени для обох груп, казали що для молодшої групи (i7.juniors) екзамен був навіть складнішим, ніж для дорослих (i7). Будь хто може це перевірити. Або виділити годину часу, відкрити завдання і спробувати. І перевірити себе.
Завдання для молодшої групи (i7.juniors)
Завдання для старшої групи (i7)
Літом 2020 року я захопився програмуванням контроллерів. І перед початком нового навчального року навіть виготовив три екземпляри для школи , в якій працюю.
Ці пристрої можуть бути корисними для роботи школи в нових умовах. Учні зможуть більш оптимально керувати своїм часом, дізнаватися шкільні новини. Батьки, які згідно нових правил будуть чекати дітей за межами шкільної будівлі, за допомогою даних пристроїв зможуть отримати актуальну інформацію про події шкільного життя, про розклад дзвінків, оперативні оголошення.
Розумні шкільні годинники вміють:
— показувати точний час, синхронізуючись з серверами точного часу в Інтернеті
— показувати дату і день тижня
— показувати три погодні блоки: погода зараз (температура, вітер, тиск, хмари, вологість) та прогнози погоди на сьогодні і на завтра
— коли триває урок, годинник показує який урок за номером, скільки хвилин залишилось до його завершення і в який час урок завершиться
— коли триває перерва, годинник показує, через скільки хвилин почнеться наступний урок, вказуючи його номер і час початку
— годинник уміє опрацьовувати нестандартні розклади уроків (робоча субота, друга зміна, скорочені уроки, зсунутий час перерв). Інформацію про нестандартні випадки всі шкільні розумні годинники самостійно скачують з сайту школи. Система централізована, достатньо розмістити на сайті школи єдиний файл з нестандартним розкладом — всі шкільні годинники скачають цей файл і розпочнуть використовувати для інформування
— годинники в початковій школі використовують розклад дзвінків для початкової школи
— годинники виводять інформаційні повідомлення. Вони скачують їх з сайту школи і виводять у вигляді рухомого рядка згідно графіку. Наприклад, у файлі інформаційних повідомлень на сайті школи вказано, що повідомлення «Мийте руки з милом» необхідно демонструвати кожну хвилину, а повідомлення «Ви можете в будь-який час безконтактно поміряти температуру у шкільної медичної сестри» — один раз на 10 хвилин. Тексти повідомлень і графік показу можна корегувати прямо на сайті, годинники скачають собі оновлені версії файлів і будуть використовувати при інформуванні. Якщо в конкретну хвилину необхідно показати кілька повідомлень, вони продемонструються послідовно
— годинники в початковій школі використовують свій набір інформаційних повідомлень і повільну швидкість переміщення рухомого рядка, дозволяючи учням прочитати тексти
— годинники, що показують інформацію на вулицю для батьків, використовують свій окремий набір інформаційних повідомлень
— розумний шкільний годинник захищений від стороннього інформаційного впливу
Технічні дані: Обладнання: Контролер NodeMCU + дві світлодіодні панелі MAX7219
Живлення: DC 5V (micro USB)
Корпус: прозорий, допитливі учні можуть побачити, що в годинниках всередині.
Собівартість запчастин для годинника: близько 500 гривень при купівлі в Китаї
Формат зовнішніх файлів розкладів та інформаційних повідомлень: JSON
Програмне забезпечення: годинники розроблені на базі проекту Івана Захарова «VZ_Clock» (github.com/IZ76/VZ_Clock), модулі синхронізації з сайтом, інформування і розкладу уроків писав сам.
Мова програмування: С/С++
Розробка: літо 2020 року
Як розумний годинник працює - у відео:
При реєстрації персонального акаунту на Gmail ви можете обрати собі логін з вільних. Але спочатку давайте розберемося з транслітерацією.
Припустимо, Вас звати Сергій Дяченко (як одного з моїх найулюбленіших письменників). Так як в логіні для реєстрації пошти нам будуть потрібні лише латинські літери, то перше, що нам треба буде зробити – це дізнатися, як транслітом пишеться наше ім’я та прізвище. Звертаю увагу, що не треба питати про це думку сусідки-вчительки англійської, а варто подивитися у власну ID-картку, там написано. Власникам паспортів старого зразку можна подивитися у закордонний паспорт. Якщо такого немає, також не проблема. Правила транслітерації регламентуються Постановою Кабінету Міністрів України від 27 січня 2010 р. № 55. Але можна не читати той чималий документ, а скористатися сервісом від Державної міграційної служби України:
https://dmsu.gov.ua/services/transliteration.html
А ще зручніше провести транслітерацію можна за допомогою сервісу Державного підприємства «Документ», там можна скопіювати текстовий результат транслітерації:
https://pasport.org.ua/vazhlivo/transliteratsiya
Ви пишете на даній сторінці своє ім’я і прізвище українською, а сервіс вам повідомляю про те, як буде по правилам постанови Камбіну все це писатися транслітом. Зручно.
Таким чином ваше ім’я буде писатися Serhii Diachenko
Далі ми реєструємося на Gmail і нам дуже повезе, якщо адреса Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. буде вільною. Якщо дана адреса буде зайнята, то треба придумати новий логін. Звичайно, я не раджу те, що пропонує гугл з цифрами і буквами, або щось на кшталт Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. , є більш класні і розумні варіанти.
Припустимо, що адреса Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. – вільна. Ми зареєструвалися, як правило прив’язали пошту до телефону і включили двофакторну аутентифікацію, то зрозуміло.
Все що було написано вище – для багатьох не новина. А тепер – перший бонус для тих, хто сюди дочитав.
Якщо ваш друг напише вам листа на Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. то лист ви отримаєте. А якщо ваш друг пропустить крапку і напише вам на Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. - то отримаєте? Так!
А якщо ваш друг напише вам на Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. ? Також отримаєте! Отже, в особистих акаунтах крапка не має значення. Це, до речі, написано в google-help, отже це не помилка, а концепція.
Але якщо у вас корпоративний акаунт Google, наприклад Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. , то крапка в адресі важлива, і якщо ви її пропустите, то це буде інша адреса.
А тепер — ще один бонус, для тих, хто і сюди дочитав.
Припустимо, ви хочете поспілкуватися зі студентами Інституту Специальних Технологій міста Торпи. Тоді просто на сайті інституту вкажіть, що ваша адреса буде не звичайна, а, наприклад, така: Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
Всі листи, що будуть відправлені на дану адресу ви отримаєте на свій звичайний акаунт Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. , а використавши можливості фільтрації Gmail можете одним правилом такі листи перенести в окрему теку.
Використання плюса в адресах пошти працює і в корпоративному акаунті. Наприклад, якщо у вас в школі є гурток любителів англійської, вони можуть писати вам на Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. і ви будете такі листи фільтрувати одним правилом в окрему теку і переглядати в першу чергу.
Ще один приклад: ви шукаєте роботу через інтернет-сайти. Всім сайтам, які будуть вам розсилати пропозиції ви можете вказати, що ваш email Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
І всі листи, що прийшли на таку адресу з різних сайтів одним правилом фільтрування будуть переміщуватися в окрему теку.
Треба врахувати, що є сайті, які при реєстрації забороняють використання плюса в email. Тоді такі листи треба буде опрацьовувати окремо.
Можна використовувати плюс в email адресі і для інших цілей, тут вже все залежить від необхідності і цілей.
В перший день літа 2020 року на сайті відкривається новий сервіс — «Квиток у мрію».
Ви можете самостійно створити собі такий квиток. І нехай вам щастить у здійсненні мрій.
Для створення саме вашого квитка натисніть на зображення.