PDA

Visualizza la versione completa : [PYTHON] Semplificazione funzione di confronto


petremic73
01-12-2005, 17:23
Esercizio: scrivi una funzione Confronto che ritorna 1 se x>y, 0 se x==y e -1 se x<y.

soluzione:



def Confronto(x, y):
if x > y:
return 1
elif x==y:
return 0
elif x < y:
return -1

Può essere semplificata?

Ikitt
01-12-2005, 17:43
Originariamente inviato da petremic73
Esercizio: scrivi una funzione Confronto che ritorna 1 se x>y, 0 se x==y e -1 se x<y.

soluzione:



def Confronto(x, y):
if x > y:
return 1
elif x==y:
return 0
elif x < y:
return -1

Può essere semplificata?
Puoi sostituire l'ultimo elif con un else secco:


def Confronto(x, y):
if x > y:
return 1
elif x == y:
return 0
else:
return -1

o puoi utilizzare direttamente il built-in
cmp :D

daniele_dll
01-12-2005, 17:52
non so se si può fare ... ma provare non nuoce

un bel

return x > y ? 1 : (x == y ? 0 : -1)

non so se python supporta gli operatori unari (se non erro si chiamano cosi) però fare la prova non nuoce :D

petremic73
01-12-2005, 17:59
non so se si può fare ... ma provare non nuoce

un bel

return x > y ? 1 : (x == y ? 0 : -1)

Daniele, anche se in PYTHON non si può fare è bellissima! :)
Grazie


puoi utilizzare direttamente il built-in
code:--------------------------------------------------------------------------------cmp--------------------------------------------------------------------------------

Cosa intendi esattamente? esiste un modo di "auocostruzione" :confused: ?

Fox82
01-12-2005, 18:13
La funzione cmp fa esattamente quello che chiedi tu.

Comunque il costrutto proposto da daniele_dll è perfettamente possibile:




condizione and expr or expr

x > y and 1 or (x < y and -1 or 0)


Unico problema: se l'espressione subito dopo l'and è falsa, il risultato non sara quello che ci si aspetta.

Ad esempio:




False and 0 or 3



darà come risultato 3. Occhio perchè può generare parecchi errori

Loading