Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Risultato espressione in Python

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

1
voti

[1] Risultato espressione in Python

Messaggioda Foto UtenteEdmondDantes » 15 mag 2024, 17:50

Ci sono stati aggiornamenti importanti tra le release Python 2.7.x e Python 3.8.x. Il comportamento di uno stesso codice elaborato con le due release può essere abbastanza diverso da quello atteso.
Per esempio nell'ambito dell'aritmetica in virgola mobile la funzione built-in round() non si comporta allo stesso modo. Provate con
Codice: Seleziona tutto
round(0.5)


Questo è solo un preambolo per introdurre il mio fatto.
Calcolare la seguente espressione

Codice: Seleziona tutto
(40*(40/3))/(40+40/3)


in Python 3.8.10 e in Python 2.7.18, e, se avete tempo anche in R version 4.4.0

Ritorno a leggere che è meglio,va :mrgreen:

PS
In sintesi: mai distrarsi perché il floating-point è lì che ti aspetta :mrgreen: , anche senza invocarlo. Le dichiarazioni obbligatorie avevano il loro perché :D
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln
Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
 
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia

0
voti

[2] Re: Risultato espressione in Python

Messaggioda Foto Utentelelerelele » 16 mag 2024, 14:51

Certamente, hai ragione, (anche se non uso python), sul PC programmo windows in VB.NET.

Ricordo quel poco che ho programmato microcontrollori, in C, nelle espressioni ho quasi sempre dichiarato il tipo numerico usato nell'espressione, altrimenti avevo errori, appunto perché il compilatore vada ad eseguire il calcolo che mi aspetto.

Certo che è un problema rognoso avendo gia il programma testato e funzionante.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[3] Re: Risultato espressione in Python

Messaggioda Foto UtenteEdmondDantes » 16 mag 2024, 15:22

Oltre alla dichiarazione del tipo di variabile e al significato assegnato alle operazioni, abbiamo anche il problema sull'ordine dei calcoli eseguiti. Prova a sistemare diversamente le parentesi, togliendo per esempio quelle superflue, lasciando ovviamente inalterata l'identità dell'espressione. Otterrai valori diversi tra le due release e diversi rispetto alla prima elaborazione.
Estendendo l'argomento, bisogna considerare anche l'aritmetica di macchina e l'analisi degli errori. Ho aperto questo argomento solo per sottolineare quanto possa essere deleterio risolvere i problemi fisici mediante un approccio informatico senza un'opportuna e necessaria riflessione. Purtroppo questo approccio è troppo spesso consigliato anche in questo forum.

Estendendo ancora una volta l'argomento, diciamo che il risultato di un'operazione fra due numeri di macchina non è detto che sia a sua volta un numero di macchina e che la moltiplicazione di macchina non gode della proprietà associativa.
In sintesi il problema non sussiste solo fra due release di uno stesso software o fra software diversi, ma anche all'interno di uno stesso programma.
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln
Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
 
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia

0
voti

[4] Re: Risultato espressione in Python

Messaggioda Foto Utenteboiler » 17 mag 2024, 22:05

Python è di gran lunga il peggior linguaggio con cui abbia mai lavorato (e un paio di linguaggi li ho visti)!

Gli operatori logici cosa ritornano? Un valore booleano True o False? No! Sarebbe troppo semplice. Troppo poco "pythonico":
Codice: Seleziona tutto
print(True and 75.1)    # --> 75.1

print("False" or True)  # --> False


Sintassi del genere dovrebbero essere proibite. E invece è il modo considerato "elegante" per ottenere questi risultati:
Codice: Seleziona tutto
numbers = [1, 2, 3]
for num in numbers:
    if num == 5:
        print("It's 5!")
        break
else:
    print('5 was not listed')


Due funzioni con uso simile, ambedue built-in. Una ritorna un oggetto, l'altra un iteratore:
Codice: Seleziona tutto
initial_list = [2, 1, 5]

reversed_list = reversed(initial_list)
print(reversed_list)  # --> <list_reverseiterator object at 0x7f3fde9128b0>

sorted_list = sorted(initial_list)
print(sorted_list)  # --> [1, 2, 5]

(non c'è bisogno che mi spieghiate che il sorting deve per forza di cose generare un nuovo oggetto e quindi posso ritornarlo senza perdita di efficienza, mentre restituire l'iteratore per invertire la lista è piú efficiente. Lo so già. Si poteva benissimo restituire in ambo i casi un iteratore, senza significative perdite e aumentando notevolmente la coerenza)

Codice: Seleziona tutto
my_list = [3, 9, 27, 81, 243, 729, 2187]
print(my_list[-999])        # --> IndexError
print(my_list[3:-999:-1])   # --> [81, 27, 9, 3]


Sprezzo, per Python ho solo sprezzo.
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5599
Iscritto il: 9 nov 2011, 12:27

0
voti

[5] Re: Risultato espressione in Python

Messaggioda Foto UtenteEdmondDantes » 17 mag 2024, 22:41

La mia non è una critica al linguaggio Python. Ogni linguaggio ha vantaggi e svantaggi.

print("False" or True) # --> False

La maggior parte degli oggetti con "contenuto" è valutato come True. Le stringe sono tutte True tranne quella vuota. Tutti i numeri sono valutati True tranne lo zero.
L'operatore OR valuta il secondo argomento (il tuo True) solo se il primo è False.
Il False ottenuto è la stringa "False" non il valore booleano.

type("False" or True)
<class 'str'>


Dunque

Codice: Seleziona tutto
print("False" or True)  # --> False
print("casa" or True)  # --> casa
print(100 or True)  # --> 100
print(False or True)  # --> True
print(0 or True)  # --> True


e così via.
Ha la sua logica

PS
Non è una critica al linguaggio, ma alla risoluzione dei problemi tramite calcolatore senza un'adeguata e sufficiente preparazione. Ho voluto mostrare che anche un caso semplice, un parallelo fra due resistenze, può nascondere delle insidie di natura numerica. In secondo luogo, Python ci mette lo zampino con le differenze significative fra le due release.
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln
Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
 
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia

0
voti

[6] Re: Risultato espressione in Python

Messaggioda Foto Utenteboiler » 17 mag 2024, 22:53

EdmondDantes ha scritto:La mia non è una critica al linguaggio Python. Ogni linguaggio ha vantaggi e svantaggi.

Avevo capito.

La maggior parte degli oggetti con "contenuto" è valutato come True. Le stringe sono tutte True tranne quella vuota. Tutti i numeri sono True tranne lo zero.
L'operatore OR valuta il secondo argomento (il tuo True) solo se il primo è False.


La teoria e la logica che ci stanno dietro le conosco.
Ed è proprio per questo che trovo che sia un abominio.

Non è che non capisco. È che capisco e disprezzo.

Il False ottenuto è la stringa "False" non il valore booleano.

Che è parte del problema. Perché mai un operatore logico dovrebbe accettare in ingresso una stringa?

C# da questo punto di vista è rigorosissimo ed è una cosa che apprezzo.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5599
Iscritto il: 9 nov 2011, 12:27

0
voti

[7] Re: Risultato espressione in Python

Messaggioda Foto UtenteEdmondDantes » 17 mag 2024, 22:58

capisco il tuo punto di vista e potrei anche essere d'accordo.

Ho un problema dove ricorre spesso la domanda: stringa vuota?
Con C# lo risolvo in n righe, in Python una riga e fine della storia. Ovviamente, di contro, senza un'adeguata preparazione rischierei di fare danno, danno che eviterei usando un linguaggio rigoroso.
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln
Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
 
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia

0
voti

[8] Re: Risultato espressione in Python

Messaggioda Foto Utenteboiler » 17 mag 2024, 23:16

EdmondDantes ha scritto:Ho un problema dove ricorre spesso la domanda: stringa vuota?
Con C# lo risolvo in n righe


dove n=1 :ok:

Codice: Seleziona tutto
string myString = "xxxx";

if (String.IsNullOrEmpty(myString))
    // do something


Se mi dici che con Python devi scrivere meno, è vero.
Ma nel 2024 gli ambienti di sviluppo hanno una cosa che si chiama autocompletion e le due parole in piú secondo me valgono la chiarezza e immediatezza del codice.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5599
Iscritto il: 9 nov 2011, 12:27

0
voti

[9] Re: Risultato espressione in Python

Messaggioda Foto UtenteEdmondDantes » 17 mag 2024, 23:28

boiler ha scritto:le due parole in piú secondo me valgono la chiarezza


In passato io ho usato il FORTRAN. Poi mi sono evoluto e ho imparato il Fortran :D (attenzione: case sensitive)
Penso di essermi spiegato ;-)
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln
Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
 
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti