Forum >> Principianti >> Valori booleani di variabili, stringhe e numeri

Pagina: 1

Ciao, se invece di assegnare un valore bool ad una variabile mediante l'enunciato di assegnazione, lo assegno mediante invocazione della funzione input, i valori assunti dalle espressioni booleane non risultano sempre corretti.
Mi spiegate il perché?


--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2017-12-17 00:38:13 ---

--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2017-12-17 19:50:10 ---
Ho capito.
La sequenza di caratteri forniti mediante la tastiera, viene restituita dalla funzione input sotto forma di stringa. Che valore booleano ha una stringa? Sempre True oppure nessun valore?.

a = input()
b = input()

print(a and b) #restituisce sempre il valore di b
print(a or b)  #restituisce sempre il valore di a

if a and b:    #è sempre verificata, tranne per stringa nulla ""
    print("ciao") 
Poiché gli operatori and e or vengono valutati mediante cortocircuito, ne deduco che una stringa di testo abbia il valore booleano True.



--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2017-12-17 01:12:39 ---
Ricapitolando una stringa di testo ha sempre il valore booleano True tranne assegnandole un valore nullo "".
Un valore intero ha il valore True se è diverso da 0.
Un valore float ha il valore True se è diverso da 0. Nel seguente esempio ha valore True anche se è un numero complesso, ma non capisco il perché.

Se assegno ad a il valore (-2) ** (1 /2), che equivale a radice quadrata di -2, risulta un valore complesso e Python non dà errore.
Ad a viene quindi assegnato un numero comlplesso il cui valore bool è True:
a = (-2) ** (1 / 2)

if a :
    print("OK", a)
Il numero complesso risultante è generato da un errore di approssimazione in virgola mobile?
8.659560562354934e-17+1.4142135623730951j

Se assegno ad a il valore sqrt(-2), che è l'identica cosa dell'assegnazione precedente, dà errore ValueError: math domain error
from math import sqrt

a = sqrt(-2)

if a :
    print("OK", a)

Perché? Forse nel primo caso non dà errore a causa di un errore di approssimazione in virgola mobile?


--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2017-12-17 11:24:07 ---
Ὅμηρος 蟒蛇 said @ 2017-12-17 10:17:45:
Se assegno ad a il valore sqrt(-2), che è l'identica cosa dell'assegnazione precedente, dà errore ValueError: math domain error
from math import sqrt

a = sqrt(-2)

if a :
    print("OK", a)

Perché? Forse nel primo caso non dà errore a causa di un errore di approssimazione in virgola mobile?
>>> from cmath import sqrt
>>> sqrt(-2)
1.4142135623730951j

THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Ok, allora anche un numero complesso diverso da 0j è sempre True.
Per utilizzare una funzione matematica per eseguire operazioni con numeri complessi bisogna importare il modulo cmath, altrimenti dà errore.
Nel primo caso aveva calcolato il numero complesso senza dare errore perché non erano state utilizzate funzioni matematiche.
Grazie.


Pagina: 1



Esegui il login per scrivere una risposta.