Laboratorul 02 - Introducere în Python

Scop

  • familiarizarea cu conceptele de bază din programare
  • interacțiunea cu placa de dezvoltare folosind Python

Cuvinte cheie

  • for, if, while, vector
  • basic, music
  • show_string, show_number, show_leds, clear_screen, pause
  • play_tone, start_melody

Concepte de programare

Variabile

Variabilele sunt moduri în care referențiem valori de anumite tipuri. Spre deosebire de limbaje de programare precum C sau C++, în python tipurile de date sunt identificate în momentul inițializării.

Câteva exemple de tipuri din python sunt:

variabile.py
x = 2                                                           #int    - număr întreg
x = 2.7                                                         #float  - număr cu zecimale
x = "c"                                                         #char   - caracter ASCII
x = True                                                        #bool   - valoare logică: True/False

Odată ce a fost asignat un tip de date, putem reasigna alt tip printr-o nouă inițializare (ca mai sus), însă anumite tipuri de date nu pot fi combinate, de exemplu: să adunăm un număr întreg la un șir de caractere.

Șiruri / Vectori

Șirurile/Vectorii sunt variabile mai inteligente de o anumită dimensiune ce pot stoca un șir de valori de fiecare tip de mai sus. Exemplu:

variabile.py
x = "Hello Python!!!"                                           #string - șir de caractere, declarat direct folosind ""
x = ['h', 'e', 'l', 'l', 'o']                                   #string - declarat ca vector de caractere ASCII
x = [2, 3.2, 21, 12]                                            #array  - vector de numere

Un lucru atipic la Python față de multe limbaje de programare clasice, este faptul că acesta ne permite să avem valori din tipuri diferite de date în cadrul aceluiași vector (numere întregi, șiruri de caractere și valori logice).

If - Else

Propoziția if este o propoziție condițională folosită pentru a executa instrucțiuni în funcție de anumite condiții. Construcția if-else se traduce prin “dacă - altfel”:

if_else.py
a = 10
if a == 10:                         # Dacă a este egal cu 10
   a = a / 2                        # Fă operații dacă a este 10
else:                               # Altfel
   a = a * 2                        # Fă operații când a este diferit de 10

Blocul de cod care trebuie executat este identificat prin numărul de aliniate, deci aveți mare atenție la indentarea codului!

For

Structura for este o structură repetitivă în funcție de o condiție. Mod de utilizare:

for.py
fruits = ["măr", "cireșe", "pară", "banană"]
 
# for element în vector_de_elemente:
for f in fruits:
  print(x)
 
# Codul de mai sus va afișa: măr cireșe pară banană
 
# Alternative mai apropiate de C:
 
# for element în range(valoare maximă care nu va fi atinsă):
for x in range(6):
  print(x)
 
# Codul de mai sus va afișa: 0 1 2 3 4 5
 
# for element în range(valoare inițială, valoare maximă care nu va fi atinsă, valoare de increment)
# Ultima valoare poate lipsi din construcție, fiind implicită valoarea de 1
for x in range(2, 10, 2):
  print(x)
 
# Codul de mai sus va afișa: 2 4 6 8

Parcurgerea unui șir

Accesarea unei anumite valori dintr-un vector se face prin index-ul(poziția) valorii din vector.

vector.py
v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sum = 0
 
print(v[3])                    # afișează valoarea de pe poziția 4: 4 (indexarea se face începând de la 0)
 
for i in range(len(v)):
  sum = sum + v[i]
 
print(sum)                     # afișează 55
 
# O altă alternativă de calcul al sumei ar fi fost:
for element in v:
  sum = sum + element

Interacțiunea cu simulatorul în Python

Pentru a putea interacționa cu simulatorul, fiecare din funcțiile expuse în Python de către placă trebuie prefixate cu “basic” (care este obiectul în care se află funcțiile respective).

Un exemplu de astfel de funcție este scrierea unui șir de caractere pe ecran:

basic.show_string('Hello!')

Interacțiunea cu led-urile de pe placă

Funcțiile principale pe care le avem la dispoziție sunt:

  • Afișarea unui șir de caractere pe ecran:
basic.show_string('Hello!')
  • Afișarea unui număr pe ecranul de led-uri:
basic.show_number(0)
  • Afișarea unei imagini din led-uri:
basic.show_leds("""
    . # . # .
    # # # # #
    # # # # #
    . # # # .
    . . # . .
    """)
# Se va afișa o inimă din Led-uri
# # - semnifică led aprins
# . - semnifică led stins
  • Stingerea tuturor led-urilor de pe placă:
basic.clear_screen()
  • Întârzierea execuției programului cu un anumit număr de milisecunde:
basic.pause(1000)

Sunete folosind Python

Funcții pentru redarea sunetelor folosind simulatorul de Microbit:

  • Redarea unei singure note folosind obiectul “Note”:
freq = Note.D
music.play_tone(Note.C, 1000)
  • Redarea unei melodii o singură dată:
melody = music.built_in_melody(Melodies.ENTERTAINER)      # Vom folosi o melodie predefinită
music.start_melody(melody, MelodyOptions.ONCE)            # Redă o singură dată melodia
  • Redarea unui sample până când se termină acel sample:
soundExpression.giggle.play_until_done()

Funcționalitățile explicate mai sus, dar și altele pot fi găsite în documentație.

Exerciții

  1. Generați o secvență de imagini care să apară pe ecran la un anumit interval de timp.
  2. Generați o secvență folosind ecranul din LED-uri. Veți genera mai întâi o imagine, iar după 2 secunde de întârziere, vă veți scrie prenumele (de preferat prescurtat) sau o poreclă. În final după încă o întârziere de 200 de milisecunde, veți aprinde toate led-urile de pe plăcuță (simularea umplerii ecranului).
  3. Afișați pe ecranul format din led-uri numerele de la 1 la 10.
  4. Afișați pe ecran numerele pare de la 1 la 20.
  5. Parcurgeți numerele de la 1 la 30: dacă numărul este divizibil cu 5, afișați o inimă, dacă numărul este divizibil cu 3 (dar nu și cu 5), afișați o față zâmbitoare, iar în orice alt caz afișați o față tristă.
  6. Generați un vector de 20 de elemente aleatoare între 0 și 100. Apoi parcurgeți vectorul generat și calculați numărul de elemente care sunt divizibile cu 10 și numărul de elemente divizibile cu 9. Dacă numărul de elemente divizibile cu 10 este mai mare, afișați o față zâmbitoare pe ecran. În caz contrar, afișați o față tristă. Hint: pentru generarea de elemente aleatoare, uitați-vă în secțiunea Math, la funcția randint.
  7. Modificați proiectul anterior pentru a găsi numărul prim cel mai mare din vector și se va afișa pe ecran. Dacă nu există niciun număr prim în vector, se va genera o secvență în care toate led-urile se aprind de 3 ori cu o întârziere de 500 ms între ele.
  8. Modificați proiectul anterior astfel încât în caz de succes se va cânta melodia “Entertainer”, iar dacă numărul nu este găsit se va reda melodia “Funeral”. Se va folosi funcția music.built_in_melody.
  9. Căutați pe google notele pentru melodia “Twinkle Twinkle little star” și creați un vector cu notele respective. Apoi folosiți funcția play_tone pentru a reda melodia.
  10. Adaptați proiectul anterior pentru a genera câte o imagine diferită pentru fiecare notă care este redată.
  11. Creați un proiect nou în care veți reda aceeași melodie, folosind funcția music.play_melody (mai multe detalii în platformă, în meniul de music, primul bloc). Încercați să adaptați codul pentru a genera imagini în mod similar exercițiului anterior.
  12. Implementați redarea primelor note din melodia preferată. Modificați diverse variabile precum tempo-ul și volumul.
  13. Redați un sample precum cel din laborator și afișați o față zâmbitoare.
info2/laboratoare/02.txt · Last modified: 2021/03/09 14:55 by alexandru.vochescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0