Domanda Risolto Risolutore di espressioni con Python 3

Stato
Discussione chiusa ad ulteriori risposte.

Il_Ribelle

Utente Bronze
24 Gennaio 2017
37
12
2
35
Sto creando un risolutore di espressioni, funziona alla perfezione con addizioni e sottrazioni.
Il controllo delle moltiplicazioni avviene all'inizio del codice e funziona in modo diverso per poter eseguire il calcolo e rimuovere le parentesi.
Le moltiplicazioni ad una cifra funzionano ma a due o più cifre inizia a dare risultati sbagliati.
Sapreste come eseguire moltiplicazioni rimuovendo le parentesi e senza ottenere risultati sbagliati?
 
Ciao! devi utilizzare la notazione polacca inversa, separare gli operatori dagli operandi in una struttura dati adatta come lo stack o un semplice array. Ogni volta che fai il pop dell'operatore fai il pop di 2 operandi.
ad esempio 3 + 5 diventa 3 5 +.
Fai il pop del +, e i prossimi 2 pop vanno associati alla semantica del + quindi la somma.
Tu scorri la struttura dati per le moltiplicazioni e le divisioni prima e poi tratti addizioni e sottrazioni:

3 + 5 * 8 - 2 diventa
2 3 5 8 - + * che poi diventa
2 3 40 - + e
2 43 - infine
41

Questo è il metodo più efficiente, è utilizzato nelle calcolatrici e negli interpreti di espressioni.
https://it.wikipedia.org/wiki/Notazione_polacca_inversa
 
  • Mi piace
Reazioni: DocWho
Ciao! devi utilizzare la notazione polacca inversa, separare gli operatori dagli operandi in una struttura dati adatta come lo stack o un semplice array. Ogni volta che fai il pop dell'operatore fai il pop di 2 operandi.
ad esempio 3 + 5 diventa 3 5 +.
Fai il pop del +, e i prossimi 2 pop vanno associati alla semantica del + quindi la somma.
Tu scorri la struttura dati per le moltiplicazioni e le divisioni prima e poi tratti addizioni e sottrazioni:

3 + 5 * 8 - 2 diventa
2 3 5 8 - + * che poi diventa
2 3 40 - + e
2 43 - infine
41

Questo è il metodo più efficiente, è utilizzato nelle calcolatrici e negli interpreti di espressioni.
https://it.wikipedia.org/wiki/Notazione_polacca_inversa
Ho risolto il maniera diversa, c'era un errore di conversione, però la notazione polacca inversa è molto interessante, stavo pensando di usarla per rendere il programma più leggero e magari permettere di aggiungere anche le parentesi quadre e graffe.
Grazie mille!
 
  • Mi piace
Reazioni: Informaticage
Stato
Discussione chiusa ad ulteriori risposte.