Scratch (Blockly)
W e‑materiale Wyodrębnianie cyfr z danej liczbyWyodrębnianie cyfr z danej liczby opisaliśmy algorytmalgorytm wyodrębniania cyfr liczby za pomocą języka ScratchScratch. Teraz rozwiążemy ten sam problem za pomocą platformy Google BlocklyGoogle Blockly oraz języka Python.
Interaktywna treść merytorycznaInteraktywna treść merytoryczna
MultimediumMultimedium
Zestaw ćwiczeń interaktywnychZestaw ćwiczeń interaktywnych
SłownikSłownik
BibliografiaBibliografia
Operacje dzielenia całkowitego i obliczania reszty
Wyodrębnianie cyfr z danej liczbyWyodrębnianie cyfr z danej liczby
Wprowadzenie do programowania w języku PythonWprowadzenie do programowania w języku Python
Pisanie poleceń w języku Python w trybie interaktywnymPisanie poleceń w języku Python w trybie interaktywnym
Stworzysz program, którego zadaniem będzie badanie parzystości liczby, wykorzystując język Blockly.
Omówisz funkcję
floor()ze standardowego modułustandardowego modułumathw języku Python.Przygotujesz program wyodrębniający cyfry liczby w języku Python.
Przykładowy program w języku ScratchScratch, który rozwiązuje problem wyodrębniania cyfr liczby podanej przez użytkownika
Znamy już język programowania Scratch zaprojektowany przez Mitchela Resnicka i rozwijany przez MIT Media Lab. Zapoznajmy się z tym, w jaki sposób zmienić program zapisany z wykorzystaniem języka Scratch w program w języku Python.

Omówienie poszczególnych bloków programu realizujących algorytmalgorytm
Rozpoczynamy od bloku
Kiedy kliknięto [zieloną flagę].

Następnie pobieramy od użytkownika liczbę. W języku Scratch używamy do tego bloku
zapytaj. W dalszej kolejności odpowiedź użytkownika przypisujemy do zmiennejliczbaza pomocą blokuustaw. W języku Scratch zmienną musimy wcześniej utworzyć, dodając ją w sekcjiZMIENNE.

Odpowiadający kod w Pythonie:
Przykładowy kod uruchomiony w IDLE.

W języku Scratch nie ma rozróżnienia między tym, czy użytkownik podaje liczbę, czy tekst. W języku Python ta różnica również nie jest widoczna. Wszystko, co użytkownik wprowadzi za pomocą funkcji input(), w języku Python jest tekstem (<class 'str'>).
Możemy to sprawdzić, uruchamiając kod w IDLE:
Oto efekt:

Możemy sprawdzić, jak długi (z ilu znaków się składa) jest tekst podany przez użytkownika. Służy do tego funkcja len("tekst"):
Musimy zamienić ciąg znaków na liczbę. Dokonamy tego, używając funkcji int().
Przykład do wykorzystania w IDLE:
Efekt wykonania wygląda następująco (w kodzie zaznaczona jest funkcja int()):

W ten sposób uzyskujemy liczbę całkowitą (<class 'int'>) z wartości podanej przez użytkownika, która została pobrana przez funkcję input().
Kolejnym krokiem jest pętla warunkowa. W języku Scratch wykonujemy operacje tak długo, aż zmienna
liczbanie osiągnie wartości 0, wówczas kończymy operacje.

Aby w języku Python osiągnąć taki sam efekt, należy skorzystać z instrukcji while. Pętla wykonuje się tak długo, jak długo zmienna liczba ma wartość większą niż 0.
Pomimo że warunki wyglądają inaczej, pętle działają podobnie. Operacje w pętli while (Python) wykonywane są tak długo, jak długo warunek jest prawdziwy. Zwrócenie przez warunek wartości False kończy pętlę (w tym przypadku działanie pętli się zakończy, gdy wartość zmiennej liczba będzie wynosić 0).
Natomiast w języku Scratch instrukcje wewnętrzne pętli wykonywane są tak długo, jak długo warunek ma wartość False. Zwrócenie przez warunek wartości True kończy pętlę.
Bloki kodu wewnątrz pętli
Wyodrębniamy najmniej znaczącą cyfrę liczby za pomocą obliczania reszty z dzielenia (operator
%).

Odpowiadający kod w języku Python:
Wypisujemy na ekranie tę cyfrę.

Odpowiadający kod w języku Python:
Obliczamy nową wartość zmiennej
liczba, stosując dzielenie całkowite przez 10.

Odpowiadający kod w Pythonie:
Operator // w języku Python oznacza dzielenie całkowite.
Możemy użyć bloku podłoga, który obliczoną wartość wyrażenia zaokrągla w dół do najbliższej liczby całkowitej:

W języku Python odpowiada mu funkcja floor(x) z modułumodułu math.
Nie jest to jednak sposób polecany (nie należy do dobrych praktyk programowania).
Oto całkowity kod w Pythonie i efekt jego wykonania:
Przykładowy program uruchomiony w IDLE:

Istnieje podobna do języka Scratch platforma, BlocklyBlockly, która pozwala stworzyć program realizujący algorytm za pomocą bloczków, a następnie zamienić go na kod źródłowy w jednym z kilku języków programowania, np.:
JavaScript
Python
PHP
Lua
Dart.
Przyjrzyjmy się temu, jak może wyglądać proces tworzenia algorytmu wyodrębniania cyfr liczby w konkretnym języku programowania.
Prezentujemy przykładowy program realizujący algorytm wyodrębniania cyfr liczby w Blockly oraz wygenerowany kod w Pythonie.
W tym przykładzie przypisujemy zmiennej liczba wartość 847601 za pomocą instrukcji przypisania, nie pobieramy jej od użytkownika. Takie pobranie pojawi się w dalszej części materiału.

Wersja w języku Python – kod wygenerowany w Blockly
Jeśli chcesz zmienić język programowania, w którym wyświetlany jest kod, skorzystaj z zakładek:

W przykładzie widzimy instrukcję import math. Za jej pomocą dodajemy bibliotekę (moduł) math. Biblioteka zawiera różne funkcje matematyczne m. in. funkcję floor(). Funkcja ta jest wykorzystywana do zaokrąglania liczb w dół do najbliższej całkowitej liczby. Jest to inny sposób wykonania działania dzielenia całkowitego.
Zapoznaj się z przykładowym kodem i uruchom go. Otrzymasz komunikat błędu – nie dodano modułu math.
Kod, w którym nie importujemy modułu math.
Kod, w którym importujemy moduł math.
Narzędzie, w którym możesz przetestować działanie kodu:
Kod wygenerowany automatycznie przez Blockly zawiera zbędne elementy.
Pozbędziemy się ich.
Kod wygenerowany:
Kod po usunięciu zbędnych instrukcji:
Usunęliśmy instrukcje inicjalizacji zmiennych.
Skopiuj kod zamieszczony powyżej i przetestuj jego działanie w testerce.
Analiza kodu wygenerowanego przez platformę Blockly
W pierwszym wierszu znajduje się instrukcja, w której dodawany jest moduł
mathza pomocą instrukcjiimport.Ta instrukcja nie ma swojego odpowiednika w blokach Blockly. Blockly sprawdza, z jakich bloków korzystaliśmy, i automatycznie dodaje odpowiednie biblioteki w trakcie tłumaczenia na inne języki.
Inicjacja zmiennych. Wszystkim zmiennym, które pojawiają się w programie, Blockly przypisuje wartość
None, czyli nic. Może to być przydatne na przykład w sytuacji, gdy chcemy zainicjować zmienną bez konkretnej wartości lub przekazać wartość, która nie ma znaczenia w danym kontekście. Warto zauważyć, że w języku Python nie ma konieczności inicjowania zmiennych, ale w wielu innych językach programowania zmienna przed pierwszym użyciem musi być zainicjowana. Oznacza to, że trzeba określić jej typ. Do dobrych praktyk programistycznych należy również nadanie jej wartości początkowej.Następnie Blockly nadpisuje wartość zmiennej (zgodnie ze stworzonym blokiem). W Blockly jest to widoczne jako blok przypisania wartości do zmiennej.

W tym przykładzie zmiennym przypisano wartości None za pomocą instrukcji przypisania. W języku Python nie musimy inicjować zmiennych, pierwsze przypisanie dowolnej wartości do nowej zmiennej powoduje automatyczne jej utworzenie. Zatem nie zapisalibyśmy takiej instrukcji, tworząc program.
Przykład kodu, który działa, jednak jest sprzeczny z dobrymi praktykami:
Kod, który jest zgodny z dobrymi praktykami:
W programie wykorzystaliśmy blok powtarzaj dopóki, którego odpowiednikiem w języku Python jest pętla warunkowa
while, a więc dopóki spełniony jest warunek logiczny (wartość zmiennejliczbajest większa niż 0).

Wewnątrz pętli znajduje się blok kodu. W języku Python oznaczamy go za pomocą wcięcia, np. 4 spacji.
W kolejnym kroku wypisywana jest na ekranie wartość zmiennej
liczba. W ten sposób można zaprezentować, jak zmienia się jej wartość w kolejnych iteracjach pętli.

Następnie wyodrębniana jest ostatnia cyfra liczby. Wykonywana jest operacja obliczania reszty z dzielenia (w tym wypadku przez 10), to tzw. dzielenie modulodzielenie modulo.

W dalszej kolejności wypisywana jest na ekranie informacja o kolejnej cyfrze.

Program dokonuje aktualizacji zmiennej
liczba. Przypisywany jest jej zaokrąglony w dół wynik dzielenia przez 10.

Zamiast funkcji floor() możliwe jest użycie dzielenia całkowitego, wykorzystując operator //.
W przykładzie liczbie przypisywana jest konkretna wartość w kodzie programu. W przyszłości poznamy funkcję input(), która może służyć do pobierania danych od użytkownika. Platforma Google Blockly pozwala na wczytanie danych z klawiatury. Kod w języku Python, który generuje, nie jest jednak zgodny z dobrymi praktykami programistycznymi.
Zwróć uwagę na to, że kod wygenerowany przez Blockly nie jest poprawny, ponieważ zmienna cyfra została zadeklarowana według Blockly jako typ float, co spowodowało, że wynik operacji modulo (%) został automatycznie skonwertowany na typ zmiennoprzecinkowy (float), nawet jeśli wynik był liczbą całkowitą. Wynik powinien być liczbą całkowitą, ale konwersja na typ float spowodowała, że zwracana była liczba zmiennoprzecinkowa (6.0), zamiast liczby całkowitej (6).
Notatnik
Animacja (samouczek)
Zapoznaj się z filmem, aby utrwalić swoją wiedzę i zapoznać się ze sposobem przygotowania programu w Blockly.

Film dostępny pod adresem /preview/resource/RvAsbo7VrLTyl
Film przedstawiający wyodrębnianie cyfr liczby naturalnej.
Platforma Blockly, w której możesz wykonywać polecenia
Wykonaj w Blockly następujące polecenia:
utwórz zmienną
wynik,utwórz zaprezentowane polecenie, a potem wygeneruj kod w języku Python.

Zapoznaj się z kodem i wykonaj polecenie.
Zestaw ćwiczeń interaktywnych
Javascript, Python, 2. PHP, Dart, 3. Lua, 4. Javascript, Python, PHP, Lua, Dart, XMLreszta z dzielenia w języku Scratch.Wykorzystując dostępne bloki, ułóż program, który do zmiennej liczba przypisze losową wartość między 1 a 100, następnie wypisze na ekranie informację Liczba jest parzysta lub Liczba jest nieparzysta, korzystając tylko z jednego bloku instrukcji warunkowej.
Zapoznaj się z ilustracją, na której znajduje się kod programu zapisanego w języku Scratch. Napisz program w języku Python, który obliczy najmniej znaczącą cyfrę wieku. Wiek obliczamy, odejmując rok urodzenia od aktualnego roku.
Dokonaj konwersji obliczonej najmniej znaczącej cyfry – przekształć ją do postaci znakowej za pomocą funkcji str().

Specyfikacja problemu:
Dane:
rok_aktualny– liczba naturalna; aktualny rokrok_urodzenia– liczba naturalna; rok urodzenia
Wynik:
program wyświetla komunikat dotyczący najmniej znaczącej cyfry obliczonego wieku
Wykorzystując rozrzucone bloki, ułóż algorytm badania parzystości liczby. Wynikiem jego działania powinna być informacja na ekranie To liczba parzysta lub To liczba nieparzysta w zależności od wyniku operacji obliczania reszty z dzielenia. Przetestuj jego działanie dla liczby 123.
Specyfikacja problemu:
Dane:
liczba– liczba naturalna; liczba, której parzystość ma być badana
Wynik:
komunikat informujący o tym, czy badana liczba jest parzysta
Wykorzystując rozrzucone bloki, stwórz algorytm wyszukiwania największego elementu w zbiorze 5 liczb rzeczywistych.
Uwaga! Brakuje niektórych bloczków. Jakich? Co należy zrobić, aby uzyskać poprawny algorytm?
Słownik
precyzyjny opis, jak wykonać określone zadanie lub rozwiązać problem, składający się z kroków, które należy wykonać w określonej kolejności
platforma do tworzenia wizualnych programów, które potem można przekształcić w kod źródłowy w różnych językach programowania, np.: Python, Dart, JavaScript; Google odradza nazywanie jej wizualnym językiem programowania; jest to narzędzie dla tworzących programy
operacja matematyczna, która zwraca resztę z dzielenia jednej liczby przez inną; operator arytmetyczny, którego symbol to znak procentu (%)
wizualny język programowania stworzony w roku 2007 przez Mitchela Resnicka, profesora MIT
funkcja w języku Python dokonująca konwersji z pewnego typu danych (np. tekst) na liczbę całkowitą (można używać jej w połączeniu z funkcją input())
funkcja w języku Python dokonująca konwersji z pewnego typu danych (np. tekst) na liczbę zmiennoprzecinkową (separatorem części całkowitej od ułamkowej jest znak kropki); można używać jej w połączeniu z funkcją input()
język Python ma wiele dodatkowych funkcjonalności zwanych modułami; standardowe moduły to te, które są instalowane razem z językiem Python (np. math, random); opisane są na stronie standardowych bibliotek języka Python
Bibliografia
Jurkiewicz A., Python 3 - Projekty dla początkujących i pasjonatów, Helion, Gliwice 2021.
Dokumentacja języka Python, docs.python.org, dostęp 27.02.2024.
Łos K., Python dla nastolatków. Projekty graficzne z Python Turtle, Helion, Gliwice 2022.
Platforma OSE IT‑Szkoła, Programowanie w Pythonie z Klubem Młodego Programisty, it‑szkola.edu.pl, dostęp 27.02.2024.
Sysło M.M., Algorytmy, Helion, Gliwice 2016.




