Powrót do scenariuszy
Szkoła podstawowa
Klasa: 7-8
Szkoła ponadpodstawowa
Klasa: 1-4
test
Autor:

Mateusz Chmielewski

Programowanie Photona w Pythonie #5 Jazda po punktach

informatyka • programowanie
Czas:
45 min.
Roboty:
x1
Akcesoria:
Accessory
Interfejsy:
Python (Photon Magic Bridge)
alt
Powrót do scenariuszy
Scenario Image

Odniesienie do podstawy programowej

Szkoła ponadpodstawowa, Informatyka II./2., I./2.
Szkoła podstawowa, Informatyka II./1, 2.

Cele zajęć

Uczeń/uczennica:
  • samodzielne rozwiązuje złożone problemy
  • poznaje złożone funkcje odwołujące się do list
  • samodzielnie tworzy kod pozwalający jak najsprawniej przejechać przez punkty kontrolne
  • ćwiczy pracę grupową

Metody pracy

  • ćwiczenie
  • eksperymentowanie

Formy pracy

  • grupowa

Materiały

  • znaczniki przeszkód x7
  • komputer na grupę

Załączniki

#5 punkty.py
Pobierz

Przebieg zajęć

Wstęp:

Na piątych zajęciach naszego cyklu stawiamy przed uczniami zadanie problemowe do rozwiązania. To półmetek naszego kursu, więc chcemy sprawdzić w praktyce zdobyte do tej pory wiedzę i umiejętności. Uczestnicy zajęć programują trasę prowadzącą robota przez ustawione na podłodze punkty kontrolne, kodują też zmienną punkty rosnącą wraz z każdą zaliczoną przeszkodą. 

Przygotowanie zajęć:

Przygotuj kilka przeszkód. Punkty kontrolne mogą przybrać formę arkuszy sztywnego papieru sklejonych w stożek, małych pudełek lub dostępnych przedmiotów.

Przebieg zajęć:

  • Zaczynamy od przypomnienia sobie, nad czym pracowaliśmy na kilku poprzednich zajęciach.
  • Nauczyciel przedstawia uczniom czekające ich zadanie. Na podłodze ustawionych jest kilka przeszkód – każda grupa programująca robota musi stworzyć kod, który sprawi, że robot podjedzie do każdej przeszkody i otrzyma za to punkt. Po przejechaniu pełnej trasy, program poda nam liczbę zdobytych punktów.
  • Przypominamy o tym, że w dokumentacji znajduje się dokładny opis wszystkich metod Photona wraz z przykładami ich zastosowania. Formułujemy też listę dobrych praktyk, dzięki którym nasza praca będzie łatwiejsza:
    • Wszystkie zmienne, listy i funkcje definiujemy w górnej części kodu, to elementy stałe, które dobrze, żeby były obok siebie. Mamy pewność, że w trakcie zmieniania kodu poniżej, nie usuniemy lub nie zmienimy ważnego dla całości kodu parametru.
    • Wiersze kończymy komentarzami zaczynającymi się od # omawiającymi elementy kodu. Dzięki temu innej osobie będzie łatwiej sprawdzić nasz kod, zrozumieć logikę, którą się kierujemy i odnaleźć ewentualne błędy.
    • Kod dzielimy na opisane w komentarzach sekcje, oddzielamy definicje od właściwego programu. Poszczególne pętle, warunki inne niezależne części algorytmu możemy oddzielić pustymi wierszami, aby zapis był bardziej czytelny.
  • Uczniowie samodzielnie programują kod spełniający przedstawione powyżej warunki i testują go.
  • Odpowiadamy na trudności, na które napotkaliśmy. Próbujemy wspólnie dojść do rozwiązania.
  • Trudność polega na tym, że zmienna w Pythonie działa inaczej niż w Scratchu. Nie zapisuje się trwale, tylko funkcjonuje w obrębie danego kodu (można ją przenieść do innego, ale jest to dosyć trudne).
    • Potrzebujemy kodu, który powtarza sekwencję:
      • dojazd do punktu
      • pomiar odległości
      • przyznanie punktu, jeśli robot jest odpowiednio blisko przeszkody.
    • Nie możemy jednak użyć prostej pętli, bo w każdym powtórzeniu ruch będzie trochę inny. Tak moglibyśmy zrobić, gdyby przeszkody były rozmieszczone bardzo regularnie, np. na rogach kwadratu, albo innej foremnej figury.
    • W tej sytuacji możemy zaprogramować pętle w oparciu o parametry z listy. Tworzymy listę kierunków, kątów i odległości. W pierwszym powtórzeniu pętli, robot obraca się w pierwszym podanym kierunku, o pierwszy podany kąt i jedzie o pierwszą podaną liczbę centymetrów. Listy muszą być jednakowej długości.
    • W pętli for i in range w nawiasie (len(kat)) oznacza, że powtórzeń będzie tyle, ile wartości ma lista kat. W tym miejscu mogłaby być wpisana nazwa dowolnej z list, w przykładzie wybraliśmy tę, której nazwa jest najkrótsza. 
    • Kierunek obrotu ustalany jest przy pomocy pętli if elsektórą możemy zastosować, bo do wyboru mamy tylko dwa kierunki. Program sprawdza, czy kierunek na liście to 'P' jeżeli tak, robot obróci się w prawo, w przeciwnym razie obróci się w lewo. To prostsze niż tworzyć drugą osobną pętle if, sprawdzającą, czy robot ma obrócić się w lewo. 
    • i to numer powtórzenia programu działającego w pętli, oznaczenie pochodzi od słowa iteracja. W połączeniu z nazwą listy i [] np. kierunek[i] oznacza, przy pierwszej iteracji pierwszą pozycję na liście kierunek, przy drugiej iteracji drugą pozycję na liście kierunek itd.
    • Warty omówienia jest też symbol == który w wielu językach programowania pełni inną funkcję niż =. Podwójny znak równości nie ustanawia wartości, tylko opisuje ją w znaczeniu matematycznym. Dlatego używamy go w równaniach.
    • Zaliczenie zadania odbywa się przy pomocy znanej nam pętli if. Zdobywamy punkt, jeśli w momencie pomiaru odległość jest mniejsza lub równa 20 cm. Wtedy zmienna punkty zwiększa się. Używamy do tego wyrażenia punkty = punkty + 1. Matematycznie to wyrażenie jest błędne, ale w programowaniu stosujemy je często. Znak równości nadaje nową wartość, a nie opisuje już istniejącą. 
  • Testujemy przygotowany wspólnie program i podsumowujemy zajęcia. Szczególnie podsumowujemy wprowadzone nowe elementy i doceniamy wszystkich, którzy samodzielnie wymyślili rozwiązania dla zadanego problemu.

Przykład skonstruowania kodu do wykonania zadania

 

Współautorem scenariusza jest Michał Nowak.

Ciekawostki/Pytania otwierające

Co jest najtrudniejsze w biegach na orientację? Znalezienie punktów, ale też odpowiednia logistyka, zaplanowanie najkrótszej trasy łączącej wszystkie punkty.