Код:
from turtle import *
speed(0)
penup()
color('navy')
for x in range(5):
setposition(0,0)
for x in range(7):
dot(55)
forward(60)
left(10)
Код:
from turtle import *
speed(0)
penup()
color('navy')
for x in range(5):
setposition(0,0)
for x in range(7):
dot(55)
forward(60)
left(10)
Код:
from turtle import *
pensize(3)
speed(0)
for x in range(100):
color('red')
forward(x * 2)
right(90)
color('blue')
forward(x)
Код:
from turtle import *
pensize(2)
speed(0)
for x in range(30):
if x < 15:
color('red')
else:
color('blue')
circle(100)
left(12)
Цей код на replit.com
Два масива
(https://www.e-olymp.com/uk/problems/2099)
Умова:
Задано два масиви чисел. Потрібно вивести ті елементи першого масиву (у том ж порядку, у якому вони йдуть у першому масиві), яких немає у другому масиві.
Вхідні дані:
Спочатку на вхід подається кількість елементів n у першому масиві, потім n чисел - елементи масиву. Далі записано кількість елементів m у другому масиві. Потім записано елементи другого масиву. Кількість елементів кожного масиву не перевищує 100. Усі елементи - цілі числа.
Вихідні дані:
У першому рядку виведіть кількість шуканих елементів, а у другому виведіть ті елементи першого масиву, яких немає у другому, у том у ж порядку, у якому вони йдуть у першому масиві.
Ліміт часу: 1 секунда
Ліміт використання пам'яті: 128 MiB
Джерело: Китеня 2011 м.Ковров
Приклад вхідних даних:
7
3 1 3 4 2 4 12
6
4 15 43 1 15 1
Приклад вихідних даних:
4
3 3 2 12
Задача нескладна, має на сайті e-olymp.com рейтинг cкладності всього 8%.
Проте під час розв’язку варто звернути увагу на одну цікаву особливість роботи зі списками.
Для початку пропоную створити третій список, в який будемо накопичувати значення елементів першого списку, що відповідають умові задачі. Наприклад:
input()
first = [int(x) for x in input().split()]
input()
second = [int(x) for x in input().split()]
third = []
for x in first:
if x not in second:
third.append(x)
print(len(third))
print(' '.join(map(str, third)))
Хоча для оптимального розв’язку буде логічним мінімальне використання пам’яті, тому спробуємо розв’язати дану задачу без додаткового списку. Наприклад:
Перебрати всі елементи першого списку. Якщо елемент з таким значенням є в другому списку, то видалити цей елемент з першого списку. Після перебору кожного елементу першого списку таким способом, у ньому залишаться тільки такі елементи, яких немає в другому списку, що нам і потрібно.
Приклад коду:
input()
first = [int(x) for x in input().split()]
input()
second = [int(x) for x in input().split()]
for x in first:
if x in second:
first.remove(x)
print(len(first))
print(' '.join(map(str, first)))
Це виглядає значно оптимальніше, програма відпрацьовує тестовий приклад, але не проходить всі тести на сайті e-olymp.com Що ж не так?
Справа в тому, що ми змінюємо список, який перебираємо. І отримуємо проблему.
Поясню на прикладі.
Нехай наш перший список: [1,2,3,4,5]
Другий список: [2,3]
Який ми повинні отримати результат? [1,4,5].
Але програма видає [1,3,4,5].
Звідки взялася трійка, програма ж повинна була її видалити!
Ось тут і є особливість. Як цикл for буде перебирати числа? По черзі. Перший елемент, другий елемент, третій елемент і т.д.
А тепер давайте послідовно проаналізуємо значення елементів першого списку: [1,2,3,4,5]
Перший елемент – одиниця, якої немає в другому списку. Отже, одиниця – унікальна, ми її не чіпаємо.
Другий елемент в прикладі – двійка. Вона є в другому списку. Тому ми її видаляємо.
Який список залишається? [1,3,4,5]. Отже, який елемент списку ми відпрацювали? Другий?
Правильно. Беремо третій. Це четвірка. А чому четвірка?
А тому що при видаленні двійки, всі елементи зсунулися і місце видаленої двійки зайняла трійка. Саме трійка стала другим елементом після видалення двійки.
Але цикл, який вже відпрацював другий елемент при наступній ітерації бере собі в роботу третій елемент, таким чином пропускаючи трійку. Виходить, наш підхід неправильний.
Аналізуючи даний приклад можна зробити очевидний висновок: якщо циклом перебираються елементи списку, то змінювати кількість елементів цього списку в циклі треба обережно, бо видалення або додавання елементів може стати причиною неправильного розв'язку.
Цю задачу, звичайно, можна розв'язати без використання третього списку. Але треба враховувати, що при видаленні, наприклад, другого елемента, список змінюється і далі потрібно знову аналізувати другий елемент. Наприклад:
count = int(input())
first = [int(x) for x in input().split()]
input()
second = [int(x) for x in input().split()]
x = 0
while count > x:
if first[x] in second:
first.remove(first[x])
count -= 1
else:
x += 1
print(len(first))
print(' '.join(map(str, first)))
Який шлях краще обрати для розв’язку? Якщо у програміста цейтнот і немає обмежень по пам’яті, то, можливо, варто скористатися простим і логічним варіантом з третім списком. А якщо ви прийшли на співбесіду щодо працевлаштування, то, мабуть… також. Як це не дивно. Але ж ми ж використовуємо менше пам’яті! Це правда, але давайте уважно перечитаємо умову: «Потрібно вивести ті елементи першого масиву…». Хто ж нам дозволяв змінювати цей масив? :)
Стартером цієї статті стала ось така картинка:
Дуже ефектне висловлювання.
Особисто я для себе давно вивів просте правило: чим ефектніше висловлювання, що приписується конкретному автору, тим менше шансів, що цей автор таке казав.
Тим більше, що Папа Римський – достатньо відповідальна посада, яку не займають в 20 років. Папа обирається, як правило, зі священників, що мають серйозні і вік і досвід, в тому числі і в сфері публічних виступів. Крім того, з високою вірогідністю у виступів високого рівня повинна існувати серйозна підготовча сторона, в яку можуть бути залучені інші, також високоосвічені люди.
І як така професійна по риториці спільнота як керівництво церкви так дивно поводиться з фактами? Плоди дерев – це система розмноження, а не бажання яблуні накормити абстрактних Івана і Оленку. Це на уроках біології всі вчителі розказують. А хто бачив докази, що сонце світить не просто так, а для людей на Землі? Тут вчителі фізики будуть мати сумніви. «Життя для інших – це закон природи» - досить спірний тезис, вам не здається? Це багато хто не погодиться…
Але темою нашого пошуку є серйозні джерела, які можуть підтвердити авторство цієї цитати. Я переглянув десятки сайтів, але прямого доказу авторства Папи Франциска не знайшов. Цей текст є і у релігіозних діячів і у філософських роздумах. Але все без посилань. Такий собі ланцюжок перепостів.
У своєму блозі персональний коучер Радислав Гандапас пише, що його вразив виступ Папи Франциска на TEDx. І під відео виступу Радислав розмістив саме цю цитату, що на картинці. Звичайно, я переглянув повністю виступ Папи Франциска на TEDx за посиланням Радислава, да ще і з українськими субтитрами.
У виступі Папа цитує мати Терезу: «Любити можна тільки власним коштом». А ще, міркуючи про владу, каже: «Що більше влади у ваших руках, то сильніше ваші дії впливають на людей і то смиренніше ви маєте діяти. Інакше влада знищіть вас, а ви знищите інших», приводячи у приклад вислів з Аргентини «Мати владу – це начебто пити джин на порожній шлунок».
«Вам паморочиться в голові, ви п’янієте, втрачаєте рівновагу, і врешті завдаєте шкоди собі і людям довкола, якщо не поєднуєте своєї влади зі смиренням і ніжністю», — каже Папа Франциск. Не знаю, що п'ють в Аргентині і Ватикані, шо точно всім шкодить, але мова не про це. У виступі Папи Франциска ні слова про дерева, що не їдять свої плоди.
Це не єдине відео Папи Франциска на TEDx, але знайти підтвердження, що автором фрази є саме він я знайти так і не зміг.
Які висновки з цього можна зробити?
Думаю, це нескладно. Це і є основи критичного мислення. Факти, особливо якщо ви їх готові перепостити необхідно перевіряти. Fact check - не просто поняття, а нормальна штука для журналістики і людей, які цінують своє слово.
Чи можу я бути абсолютно впевнений, що Папа Франциск такого ніколи не казав? Ні.
При цьому я не можу собі дозволити цитувати цю фразу з вказівкою на цього автора. Тому що фраза не пройшла мій власно проведений fact check.
Як побачите дуже гарний вислів з вказівкою автора, згадайте цю історію про яблуню, сенс життя якої в тому, щоб кормити Івана з Оленкою.