Python: Numeri (Soluzioni)ΒΆ

  1. Soluzioni:

    a = 12
    b = 23
    print a, b
    print type(a), type(b)          # int, int
    
    c = 34L
    d = 45L
    print c, d
    print type(c), type(d)          # long, long
    
    x = 21.0
    y = 14.f
    print x, y
    print type(x), type(y)          # float, float
    
  2. Soluzioni:

    print a, b, c, d, x, y
    
    print a, ";", b, ";", c, ";", ...
    
  3. Soluzioni:

    # casi semplici:
    
    prodotto = a * b                # int * int
    print prodotto
    print type(prodotto)            # int
    
    differenza = c - d              # long - log
    print differenza
    print type(differenza)          # long
    
    # divisione e divisione intera tra vari
    # tipi di numeri:
    
    quoziente = x / y               # float / float
    print quoziente
    print type(quoziente)           # float
    
    risultato = a // b              # int // int
    print risultato
    print type(risultato)           # int
    
    risultato = c // d              # long // long
    print risultato
    print type(risultato)           # long
    
    risultato = x // y              # float // float
    print risultato
    print type(risultato)           # float
    
    # casi piu' complicati, in cui il tipo del
    # risultato e' il tipo piu' complesso tra
    # quelli degli operandi:
    
    risultato = a * c               # int * long
    print risultato
    print type(risultato)           # long
    
    risultato = b * y               # int * float
    print risultato
    print type(risultato)           # float
    
    risultato = x * d               # float * long
    print risultato
    print type(risultato)           # float
    
    # qui il tipo e' determinato automaticamente
    # in base alla magnitudine del risultato:
    
    risultato = 2**0                # int**int
    print risultato
    print type(risultato)           # int
    
    risultato = 2**0                # int*int
    print risultato
    print type(risultato)           # *** long!!! ***
    
    risultato = 2**1.2              # int*float
    print risultato
    print type(risultato0           # float
    
    risultato = 2**-2               # int*int
    print risultato
    print type(risultato)           # *** float!!! ***
    
    risultato = 4**0.5              # int*float
    print risultato
    print type(risultato)           # float
    
    risultato = 2**0.5              # int*float
    print risultato
    print type(risultato)           # float
    
  4. Soluzioni:

    >>> print 10 / 12
    0
    >>> print 10 / 12.0
    0.833333333333
    >>> print 10 // 12
    0
    >>> print 10 // 12.0
    0.0
    

    Come si vede la divisione intera si comporta normalmente rispetto ai tipi: quando la applico ai due float il risultato e’ quello della divisione normale, ma troncato all’intero 0.

  5. Soluzioni:

    >>> 10 % 3
    1
    >>> 10 % 3.0
    1.0
    

    Come si puo’ vedere, % ritorna il resto di 10 / 3:

    10 = 3*3 + 1
    #          ^
    #       il resto
    

    Il tipo degli operandi non influenza il valore del risultato, solo il suo tipo.

  6. Soluzione:

    pi = 3.141592
    r = 2.5
    
    circonferenza = 2 * pi * r
    print circonferenza
    
    area = 2 * pi * r**2
    print area
    
    area = 2 * pi * r * r
    print area
    
    volume = (4.0 / 3.0) * pi * r**3
    print volume
    

    Occhio che 4 / 3 != 4.0 / 3.0.

  7. Soluzione:

    a, b = 100, True
    
    a2 = a
    b2 = b
    b = a2
    a = b2
    
    print a, b
    

    oppure:

    a, b = 100, True
    
    x = a
    a = b
    b = x
    
    print a, b
    
  8. Soluzione:

    gene1_inizio, gene1_fine = 10, 20
    gene2_inizio, gene2_fine = 30, 40
    
    # disegnino:
    #
    # 5'                            3'
    # ~~~~~xxxxxxxx~~~~~xxxxxxx~~~~~>
    #     10      20   30     40
    #      \______/     \_____/
    #       gene_1       gene_2
    
    
    # due alternative
    condizione_1 = (10 <= pos <= 20)
    condizione_1 = (pos >= 10 and pos <= 20)
    
    
    condizione_2 = (30 <= pos <= 40)
    
    
    condizione_3 = (10 <= pos <= 40)
    
    
    # due alternative
    condizione_4 = condizione_3 and not (condizione_1 or condizione_2)
    condizione_4 = (20 <= pos <= 40)
    
    
    condizione_5 = pos < 10 or pos > 40
    # occhio che:
    #
    #   pos < 10 and pos > 40
    #
    # non ha senso: e' sempre False!
    
    
    condizione_6 = condizione_1 or condizione_2
    
    
    condizione_7 = (0 <= pos <= 20)
    

    Il codice va testato con diversi valori di posizione, in modo da controllare che le condizioni si comportino come vogliamo: che siano True quando la posizione soddisfa i requisiti della domanda, e False altrimenti.

  9. Soluzione:

    tutte_e_tre = t and u and v
    
    t_oppure_u_ma_non_tutte_e_due = (t or u) and not (t and u)
    
    # NOTA: qui i backslash alla fine delle righe servono
    # per andare "a capo", potete ignorarli.
    una_delle_tre_falsa = \
        (t and u and not v) or \
        (t and not u and v) or \
        (not t and u and v)
    
    una_delle_tre_vera = \
        (t and not u and not v) or \
        (not t and u and not v) or \
        (not t and not u and v)
    

    Di nuovo, il codice va testato usando diversi valori per t, u e v. Ci sono 8 combinazioni in tutto:

    t, u, v = False, False, False
    t, u, v = False, False, True
    t, u, v = False, True, False
    t, u, v = False, True, True
    # ...