31
Python / Re:metodo __cmp__
« on: January 05, 2017, 11:11:14 PM »
Ciao!
Python usa ogni tanto delle convenzioni un po' strane: il motivo per cui carta("Asso") è minore di carta("Due") è perchè la parola asso "Asso" è lessicograficamente minore di "Due". Qui la doc ufficiale dove spiega (in inglese) come funziona You are not allowed to view links. Register or Login.
Riassumendo, se in python usi gli operatori > e < per comparare delle stringhe, quello che succede è che lui scorrerà entrambe le stringhe carattere per carattere a partire dall'inizio (indice 0). Se i caratteri allo stesso indice corrispondono, passerà a comparare i caratteri dell'indice successivo. Nel momento in cui i caratteri allo stesso indice non corrispondono, la stringa che contiene il carattere con valore ASCII maggiore viene considerata maggiore dell'altra.
In questo caso specifico, visto che all'indice zero delle due stringhe ci sono "A" e "D", la stringa che inizia per "D" sarà maggiore dell'altra.
------
Per correggere il tuo codice, ti consiglio di dare alla classe Carta (le classi in python dovrebbero sempre avere nomi in maiuscolo) due attributi: nome e valore.
L'init dovrebbe poi prendere come parametro l'attributo nome, e assegnare all'attributo valore dvalori[self.nome].
In questo modo, senza cambiare il metodo __cmp__ rispetto a come l'hai fatto tu, nè la maniera di inizializzare un oggetto di classe Carta, otterrai il risultato che volevi.
Buona fortuna nell'imparare python!
Python usa ogni tanto delle convenzioni un po' strane: il motivo per cui carta("Asso") è minore di carta("Due") è perchè la parola asso "Asso" è lessicograficamente minore di "Due". Qui la doc ufficiale dove spiega (in inglese) come funziona You are not allowed to view links. Register or Login.
Riassumendo, se in python usi gli operatori > e < per comparare delle stringhe, quello che succede è che lui scorrerà entrambe le stringhe carattere per carattere a partire dall'inizio (indice 0). Se i caratteri allo stesso indice corrispondono, passerà a comparare i caratteri dell'indice successivo. Nel momento in cui i caratteri allo stesso indice non corrispondono, la stringa che contiene il carattere con valore ASCII maggiore viene considerata maggiore dell'altra.
In questo caso specifico, visto che all'indice zero delle due stringhe ci sono "A" e "D", la stringa che inizia per "D" sarà maggiore dell'altra.
------
Per correggere il tuo codice, ti consiglio di dare alla classe Carta (le classi in python dovrebbero sempre avere nomi in maiuscolo) due attributi: nome e valore.
L'init dovrebbe poi prendere come parametro l'attributo nome, e assegnare all'attributo valore dvalori[self.nome].
In questo modo, senza cambiare il metodo __cmp__ rispetto a come l'hai fatto tu, nè la maniera di inizializzare un oggetto di classe Carta, otterrai il risultato che volevi.
Buona fortuna nell'imparare python!