# 1. Instructiunea de decizie¶

Intructiunile de decizie (decision statements) sunt utilizate in controlul executiei codului sursa, pentru selectia caii de executie, pe baza unui test.

- Sintaxa:

      if conditie:
        segment_cod

  unde in mod uzual, conditie reprezinta o expresie booleeana.

Modul de executie al instructiunii de decizie este urmatorul:

- daca conditie este evaluat ca `True`, atunci se executa segmentul de cod.
- in caz contrar, segmentul de cod nu se mai executa, iar executia programului trece la prima instructiune, plasata in codul sursa dupa instructiunea de decizie

In cazul in care in conditie se foloseste o expresie care returneaza o valoarea numerica, aceasta este interpretata ca valoarea booleaeana, dupa criteriile urmatoare:

- `False` daca expresia returneaza valoarea 0
- `True` daca expresia returneaza o valoare diferita de 0

In [2]:

    # Exemplul 1: utilizarea unei instructiuni de decizie - verificarea paritatii unui numar intreg

    # intrare program: citire intreg de la tastatura:
    your_number = int(input('Enter your integer: '))

    # algoritm
    decision = 'odd'         # initializare variabila decision

    if not your_number%2:    # test paritate
        decision = 'even'

    # iesire program: afisare rezultat
    print(f'You have entered {your_number}. It is an {decision} number.')

    Enter your integer: 40
    You have entered 40. It is an even number.

In [4]:

    # Exemplul 2: testarea apartenentei unui element (un caracter) la o colectie (text)

    # intrare in program: citire un sir de caractere de la tastatura
    your_string = input('Enter your char: ')

    # algoritm
    message  = 'Hello Python'     # initializare colectie  message (sir de caractere)
    decision = 'does not'         # initializare variabila decision

    if your_string in message:    # test apartenenta
        decision = ''

    # iesire program: afisare rezultat
    print(f'Your string {decision} belong/s to the message.')

    Enter your char: Java
    Your string does not belong/s to the message.

# 2. Instructiunea de decizie cu alternativa¶

Sintaxa:

    if conditie:
        segment_cod_True
    else:
        segment_cod_False

unde in mod uzual, conditie reprezinta o expresie booleeana.

Modul de executie al instructiunii de decizie:

- daca conditie este evaluat ca `True` atunci se executa `segment_cod_True`.
- altfel, se executa `segment_cod_False`

In [5]:

    # Exemplul 3: utilizarea unei instructiuni de decizie cu alternativa - validarea unei valori de intrare

    # intrare program: furnizare valoare variabila `viteza`
    speed = float(input('Enter the robot speed: '))

    # algoritm: test validare valoare variabila:
    if speed >= 0:
        message = f"The robot's speed is equal to {speed} [m/s]."
    else:
        message = "Error: the speed's value is negative. Enter a new value."

    # iesire program: afisare rezultat
    print(message)

    Enter the robot speed: 80
    The robot's speed is equal to 80.0 [m/s].

# 3. Instructiunea de decizie inlantuita (chained decision)¶

Sintaxa:

    if conditie_1:
        segment_cod_1
    elif conditie_2
        segment_cod_2
    ...
    elif conditie_N
        segment_cod_N
    else:
        segment_cod_False

unde in mod uzual, conditiile reprezinta expresii booleene.

Modul de executie al instructiunii de decizie:

- daca conditie_1 este evaluat ca `True` atunci se executa segment_cod_1
- altfel, daca conditie_2 este evaluat ca `True` atunci se executa segment_cod_2, ...
- altfel, daca conditie_N este evaluat ca `True` atunci se executa segment_cod_N,
- altfel, se executa segment_cod_False

In [6]:

    # Exemplul 4: utilizarea unei instructiuni de decizie inlantuita - comanda robot

    # intrare program: furnizare valoare variabila `distance` = distanta masurata intre un robot si un potential obstacol
    distance = float(input('Enter the distance: '))

    # algoritm: comanda actiune robot in functie de distanta pana la obstacol
    if distance <= 5:
        command = 'STOP'
    elif distance > 5 or distance <= 15:
        command = 'BRAKE'
    elif distance > 15:
        command = 'RUN'

    # iesire program: afisare rezultat
    print(command)

    Enter the distance: 7
    BRAKE

# 4. Instructiuni de decizie imbricate (nested decisions)¶

Sintaxa:

    if conditie_a:
        segment_cod_a
        if conditie_1:
            segment_cod_1
        elif conditie_1:
            segment_cod_2
        else:
            segment_cod_12
    elif conditie_b:
        segment_cod_b
    else:
        segment_cod_ab

In [7]:

    # Exemplul 5: utilizarea unei instructiuni de decizie imbricate  - comanda robot - V2

    # intrare program: furnizare valoare variabila `distance` = distanta masurata intre un robot si un potential obstacol
    distance = float(input('Enter the distance: '))

    # algoritm: comanda actiune robot in functie de distanta pana la obstacol
    if distance <= 5:
        command = 'STOP'
    elif 5 < distance < 15:                # varianta compacta de test a apartenentei la un interval de valori
        command = 'BRAKE'
    elif distance > 15:
        command = 'RUN'
        if distance >= 50:                 # if imbricat = permite rafinarea comportamentului
            command = 'ACCELERATE'

    # iesire program: afisare rezultat
    print(command)

    Enter the distance: 21
    RUN