Интерактивные уроки для детей 9-14 лет: Python-Junior

Page 1

Урок № 10 ЧастинаСписки.2 ЗМІСТ Ініціалізація корабля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Зоряне небо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Спостереження за галактикою . . . . . . . . . . . . . . . . . . . . 12 Запуск ракети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Захист від ворожих кораблів . . . . . . . . . . . . . . . . . . . . . 14 Матеріали уроку було прикріплено до даного PDF-файлу. Щоби отримати доступ до матеріалів уроку, відкрийте його в програмі Adobe Acrobat Reader.

На сьогоднішньому уроці вас чекає цікава пригода, під час якої ви зможете відчу ти себе справжнім капітаном космічного корабля! Перед нами стоїть завдання створити гру «Керу вання космічним кораблем». Уявіть, що ви – капітан корабля (рис. 1). Давайте напишемо програму, за допомогою якої ви зможете поглянути на зірки, подорожувати галактикою, випустити ракету і захиститися від космічних піратів. Давайте уявимо загальну структуру гри і розгляне мо наведений в кінці уроку лістинг. Рисунок 1 3 Списки. Частина 2

Ініціалізація корабля Детально розберемо програму з Лістингу 1. Для початку капітану необхідно увімкнути всі прибори і виконати ініціалізацію корабля (рис. 2). Модуль time дозволяє використовувати метод time.sleep(1). Таким чином ми зможемо виконати затримку програми. Значення у дужках вимірюється в секундах і зупиняє виконання коду на зазначений час. Рисунок 2 4 Урок № 10

Якщо помістити модуль всередину циклу for, то можна буде порядково виводити зображення ракети (рис. 3): import time for''@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@......''@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@shiptime.sleep(print('Initialization...')1)=[,,]iinrange(len(ship)):print(ship[i])time.sleep(.2) Рисунок 3 5 Списки. Частина 2

Зверніть увагу, що в списку ship знаходиться зображення у вигляді символів. Ми створили його за допомогою онлайн-сервісу, який переводить картинки в ASCII-код. Схожих сервісів досить багато, відповідно, можете використовувати будь-який, зручний для вас (напри клад, https://www.text-image.com/convert/ascii.html). В результаті перетворення картинка стане ASCII-кодом (рис. 4-5): Рисунок 4 6 Урок № 10

У кожного апарату є свій індивідуальний номер. Ідентифікаційний номер (ID) нашого корабля буде генеруватися випадковим чином на початку виконання програми. Дане значення буде зберігатися в списку name: name = [] print(print('\n**************************************')'\tSPACESHIPID-',end='')foriinrange(5):r=random.randint(0,9)name.append(r)print(name[i],end='') Рисунок 5 7 Списки. Частина 2

Уявіть, що капітан бачить панель управління кораблем, але не розуміє, за що відповідає кожна з кнопок (рис.Це6).недопустимо! Тому слід описати всі команди на панелі і коротко пояснити, для чого потрібна кожна з них: Options:print('''[1]- stars [2] - galaxy [3] - missile [4] - protection [0] - exit ''') Рисунок 6 8 Урок № 10

9 Списки. Частина 2 1 – поглянути на зоряне небо і побачити своїми очима, як народжуються зірки; 2  – почати подорож галактикою; 3  – випустити ракету; 4  – виконати захист від ворожих кораблів; 0  – закінчити виконання програми. Така інструкція важлива в будь-якій програмі, інак ше інші користувачі просто не зрозуміють, що потрібно робити.Уявіть, капітан корабля виявився неуважним і почав натискати всі кнопки підряд. Слід запобігти такій ситу ації, повідомивши, що введене значення неправильне: while ifTrue:select == '1':... elif select == '2':... else......: print('Error! Try again') Зоряне небо Нарешті пригода починається! Перше, що ми пропонуємо капітану, – полетіти у відкритий космос і по дивитися, як народжуються зірки. Ось тут і стане в нагоді бібліотека turtle. Слід врахувати один важли вий момент: після закриття вікна за допомогою метода

10 Урок № 10 exitonclick(), при повторному виклику «черепашки» може виникнути помилка. Щоб їй запобігти, додамо ме тод turtle.TurtleScreen._RUNNING = True в початок коду. Метод speed() приймає значення 0 (максимальна швидкість). if select == '1' or select == turtle.TurtleScreen._RUNNING'2': = True turtle.bgcolor('black')turtle.speed(0)turtle.pensize(1) При бажанні це число можна змінити на будь-яке інше – від 0 до 10, щоб перевірити швидкість. Тепер капітан зможе поглянути на небо і побачити народження зірок. Значення їхніх кольорів зберігаються в списку. Зі списку випадковим чином буде обраний колір зірки: білий або жовтий. colors = ['white',max_index'yellow']=len(colors) - 1 # max_index = 1 for i in range(50): # Random color random_index = random.randint(0,max_index) new_color = turtle.color(new_color)colors[random_index]

11 Списки. Частина 2 Напишемо код, який виконуватиме створення нової зірки: for i in turtle.right(turtle.forward(range(5):15)144) Зірки на небі завжди розташовані в хаотичному порядку, для цього додамо в програму модуль random. Ми зробимо таким чином: дізнаємося висоту window_ height() і ширину window_width() вікна. Щоб зірка не виявилася видимою лише наполовину, віднімемо 50 одиниць від цих значень. Розділимо на 2, оскільки центр координат (0,0) перебуває в центрі вікна. w = turtle.window_width() // 2 - 50 h = turtle.window_height() // 2 - 50 x = random.randrange(-w, w) y = random.randrange(-h, h) turtle.goto(x,y) В результаті отримаємо зоряне небо, як на наведе ному на сторінці 12 зображенні (див. рис. 7).

12 Урок № 10 Спостереження за галактикою Чи знаєте ви, як виглядає галактика? Капітану на шого корабля випала нагода подорожувати по ній (рис. 8)! Рисунок 7 Рисунок 8

13 Списки. Частина 2 Давайте створимо подобу галактики за допомогою бібліотеки turtle і циклу for. Таким чином, буде ство рена спіралевидна фігура: for i in range(100):turtle.pensize(i/100 + 1) turtle.left(turtle.forward(i)59) Запуск ракети В космосі безліч астероїдів, які можуть загрожувати вам і вашому кораблю. Уявімо, що один з таких гігантів рухається на вас, і, якщо уникнути зіткнення неможли во, слід випустити ракету. Ракета змінить траєкторію руху астероїда, і ви, цілий і неушкоджений, зможете продовжити свою космічну подорож. У коді це реалізо вано таким способом: missile = '#####################################@@[ ', '$$$####################################'......]foriinrange(len(missile)):print(missile[i])time.sleep(.2)

14 Урок № 10 В списку missile зберігаємо зображення ракети (рис. 9) у вигляді ASCII-коду і порядково його виводимо. Захист від ворожих кораблів Ви, як справжній капітан, повинні захистити свій корабель від нападу космічних піратів. У цьому вам допоможе Грут з планети Х (рис. 10). Як ви вже знаєте, ми переводимо потрібне зобра ження в ASCII-код і порядково виводимо його. В дано му випадку повторюємо цю процедуру. Рисунок 9

15 Списки. Частина 2 for i in range(5):print(name[i], end='') print('\nStart protection...') ......'....................._-$@@@$-@_................'protectiontime.sleep(1)=[,'..................._--___@@$$@$_...............']foriinrange(len(protection)):print(protection[i])time.sleep(.2) Рисунок 10

16 Урок № 10 Отже, на цьому уроці ми створили гру «Керування космічним кораблем», завдяки якій кожен може відчути себе капітаном космічного корабля!

17 Списки. Частина 2 Лістинг 1 import time import datetime import random import turtle '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'shiptime.sleep(print('''***********************************************************************************print('''*WelcometoSpaceAdventures!**)'Initialization...')1)=[,'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$$$$$$$@@@@@@@@@','@@@@@@@@@@@@@@@@@@@@@@@@@@@@$___-$$$$$$$@@@@@@@','@@@@@@@@@@@@@@@@@@@@@@@@@@-______-$$$$$$$@@@@@@','@@@@@@@@@@@@@@@@@@@@@@@@$__________-$$$$$@@@@@@','@@@@@@@@@@@@@@@@@@@@@@@___-$$$$-_____--$$@@@@@@','@@@@@@@@@@@@@@@@@@@@@$___-------$______-@@@@@@@','@@@@@@@@@@@@@@@@@@@@_____-------$____-@@@@@@@@@','@@@@@@@@@@@@@@$$$$-_______-$$$$$___-@@@@@@@@@@@','@@@@@@@@@@@@$$$$$________________$@@@@@@@@@@@@@','@@@@@@@@@@$$$$$-_____-$_______-@@@@@@@@@@@@@@@@','@@@@@@@@@@@@@@@____$$-_____-@@@@@@@@@@@@@@@@@@@','@@@@@@@@@@@@@@--_$$-_____-$@@@@@@@@@@@@@@@@@@@@','@@@@@@@@@@@@$--$$-____-$$$$@@@@@@@@@@@@@@@@@@@@','@@@@@@@@@@$$_--_-$@@@$$$$$@@@@@@@@@@@@@@@@@@@@@','@@@@@@@@@$-__--$@@@@@$$$@@@@@@@@@@@@@@@@@@@@@@@','@@@@@@@@$$-$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@','@@@@@@@$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@','@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',]

18 Урок № 10 for i in print(time.sleep(print(ship[i])range(len(ship)):.1)'\nYeah!Thespaceship is ready.') # Initialization spaceship name name = [] print(print('\n****************************************')'\tSPACESHIPID-',end='')foriinrange(5):r=random.randint(0,9)name.append(r)print(name[i],end='') # Date print('\n\tDate: ', print(print(datetime.date.today())end='')'****************************************')print('''Options:[1]-stars[2]-galaxy[3]-missile[4]-protection[0]-exit''')whileTrue:print('****************************************')print('****************************************')select=input('Yourselect:') # Stars if select == '1' or select == turtle.TurtleScreen._RUNNING'2':= True turtle.bgcolor('black')turtle.speed(0)turtle.pensize(1)

19 Списки. Частина 2 if select == print('1':'Stars are giant, luminous spheres of plasma.') # List of colors colors = ['white', 'yellow'] max_index = len(colors) - 1 for i in range(50): # Random color random_index random.randint(=0, max_index) new_color = turtle.color(new_color)colors[random_index] # Stars turtle.begin_fill() for i in turtle.penup()turtle.right(turtle.forward(range(5):15)144) turtle.end_fill() # Generate random location on the screen w = turtle.window_width() // 2 - 50 h = turtle.window_height() // 2 - 50 x = random.randrange(-w, w) y = random.randrange(-h, h) turtle.exitonclick()turtle.pendown()turtle.goto(x,y) # Galaxy else:print('Galaxies consist of stars, stellar remnants, dust, gas, and dark matter, bound together by gravity.') turtle.pencolor('purple')

20 Урок № 10 # List of colors colors = ['white', 'yellow'] max_index = len(colors) - 1 for i in turtle.pensize(i/range(100):100 + 1) turtle.exitonclick()turtle.left(turtle.forward(i)59) # Rocket elif select == '3': print('Launching a missile...') missile = [ '#####################################@@','##################################@$@@@','###############################@$-@@@@#','############################@@_$@@@@@##','##########################@-_@@@@@@@###','#######################@@_-@##@@@@@####','#####################@@_-@@@--@@@@#####','###################@@_-@@@@@@@@@#######','##################@__@@@@@@@@@@########','################@-_@@@@@@@@@@@#########','##############@$_$@@@@@@@@@@###########','#######@@$$$$@$-@@@@@@@@@@@############','#####@$@@@@@@$@@$@@@@@@@@##############','###@$@@@@@@@@@@@@@@@@@@################','##@@@@@@@@@@@@@@@@@@@@#################','#@@@##@@@@@@@@@@@@@@@@#################','#######@@@@@@@@@@@@@@@#################','######-#@@@@@@@@@@@@@##################','####$$-@-####@@@@@@@###################','##$$---$$#####@@@@#####################','#$$--$$#######@@#######################','$$$$$$#################################','$$$####################################']

21 Списки. Частина 2 for i in time.sleep(print(missile[i])range(len(missile)):.2) # Protection elif select == '4': print('An enemy spaceship is moving toward your SPACESHIP ID-', end='') for i in print(name[i],range(5): end='') print('\nStart protection...') '..................._--___@@$$@$_...............''..................._$@#@@$@@@@_................''....................$@#@@-@@@$.................''..................._@@#@_$@@@-.................''............._$_..._@@#@_$$@$._...-$_..........''.............$$.__._@@@#_@#@$...$__@$..........''.............-@@$_._@@@@@@@@$_.._@@@$..........''............._$@_.._$@$@@#@@@_..._@$_..........''.............._$@-._-@$@@@@@@..._@@-...........''..............._@@$._@$@@#@@@_..$@@_...........''................_@@__$$@@@@@@_.$@@-............''................_-@@$$$@@@#@#@@@@_.............''................._@$$$$@@@@##@@$...............''.................._@$$@@@@@@@$_................''...................._-@@#@@$_..................''...................._-@@@@@_...................''..................._$$@@@@@@$_.................''..................._-$$$$$$$$$_................''..................._@#$$@##@$$-_...............''...................-$$$$@@@$$@$-...............''...................$$$$@@@@$$@$$_..............''...................-$$$$$@@@@$$_...............''....................._-$@@@$-@_................'protectiontime.sleep(1)=[,,,,,,,,,,,,,,,,,,,,,,]

22 Урок № 10 for i in time.sleep(print(protection[i])range(len(protection)):.2) elif select == '0': elsebreak:print('Error! Try again')

© Комп'ютерна Академiя ШАГ www.itstep.org Усі права на фото-, аудіо- і відеотвори, що охороняються авторським правом і фраг менти яких використані в матеріалі, належать їх законним власникам. Фрагменти творів використовуються в ілюстративних цілях в обсязі, виправданому поставле ним завданням, у рамках учбового процесу і в учбових цілях, відповідно до ст. 1274 ч. 4 ГК РФ і ст. 21 і 23 Закони України «Про авторське право і суміжні права». Обсяг і спосіб цитованих творів відповідає прийнятим нормам, не завдає збитку нормально му використанню об’єктів авторського права і не обмежує законні інтереси автора і правовласників. Цитовані фрагменти творів на момент використання не можуть бути замінені альтернативними аналогами, що не охороняються авторським правом, і відповідають критеріям добросовісного використання і чесного використання. Усі права захищені. Повне або часткове копіювання матеріалів заборонене. Узгодження використання творів або їх фрагментів здійснюється з авторами і правовласниками. Погоджене використання матеріалів можливе тільки якщо вказано Відповідальністьджерело. за несанкціоноване копіювання і комерційне використання матеріалів визначається чинним законодавством України. Урок № 10 Списки. Частина 2

Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.