PDA

Visualizza la versione completa : [python] alcuni chiarimenti su spelling


cleaner
07-01-2008, 17:41
allora ho sviluppato questo semplicissimo e minimale code che, data una parola ne fa lo spelling lettera x lettera stampandola a video..


def funzione():
try: # inzio gestione errori
domanda = str(raw_input("Dammi una parola "))
parola = domanda
indice = 0
while indice < len(parola):
lettera = parola[indice]
print lettera
indice = indice + 1
except: # fine gestione errori
print "errore"
a= str(raw_input("premere invio per uscire, o digitare 'r' per ricaricare lo script"))
if a == "r":
print
print
return funzione()
else:
exit
funzione()


ora i miei dubbi sono:
1) come poter implementare una cosa del tipo:
data la parola "cioccolato" il programma mi restituisca oltre che lo spelling anche: "ci sono: 3c, 2o,1l ecc ecc --> spero di essermi spiegato^^

2) la gestione degli errori potrei scriverla meglio?mi chiedo però se vi sia la possibilità di generarlo l'errore, in quanto stampa a video il raw_input senza nessun vincolo...

billiejoex
07-01-2008, 18:03
ora i miei dubbi sono:
1) come poter implementare una cosa del tipo:
data la parola "cioccolato" il programma mi restituisca oltre che lo spelling anche: "ci sono: 3c, 2o,1l ecc ecc --> spero di essermi spiegato^^

Puoi usare set() per ottenere le singole lettere che compongono la parola e, ''.count() per contare le occorrenze.



>>> s = set('cioccolato')
>>> s
set(['a', 'c', 'i', 'l', 'o', 't'])
>>> for x in s:
... print "occorrenze lettera %s = %s" %(x, 'cioccolato'.count(x))
...
occorrenze lettera a = 1
occorrenze lettera c = 3
occorrenze lettera i = 1
occorrenze lettera l = 1
occorrenze lettera o = 3
occorrenze lettera t = 1
>>>





2) la gestione degli errori potrei scriverla meglio?mi chiedo però se vi sia la possibilità di generarlo l'errore, in quanto stampa a video il raw_input senza nessun vincolo...
Il blocco try/except mi pare superfluo in quanto non vedo punti in cui potrebbe venire generata un'eccezione.
In ogni caso non è mai bene catchare l'eccezione in modo generico come hai fatto tu:



try:
...
except:
...


Sempre meglio specificare QUALE eccezione ci si aspetta.
Le eccezioni che tu (programmatore) non hai considerato è giusto che siano sollevate.

billiejoex
07-01-2008, 18:07
PS: "exit" alla fine non fa nulla. Credo intendessi "exit()".

cleaner
07-01-2008, 18:55
grazie mille, perfetto ^^ funzia benissimo.. xo a me non basta vedere che funziona, ma voglia capirne il funzionamento:


domanda = str(raw_input("Dammi una parola "))
parola = domanda
indice = 0
while indice < len(parola):
lettera = parola[indice]
print lettera
indice = indice + 1

conteggio()

def conteggio(): # imposto la funzione conteggio
s = set (domanda) # imposto la variabile s, che contiene il conto delle singole lettere per l'oggetto domanda
set (["a","b","c","d","f","g"]) # setto verso quali parametri deve contare
for x in s: # creo un ciclo, che attraversa s, e quindi domanda.. però non ho capito la x che significa
print "occorrenze lettera %s = %s" %(x, domanda.count(x))



ora la parte che mi interessa è nella funzione conteggio, vicino ci sono i commenti, volevo chiedere se erano corretti..

billiejoex
07-01-2008, 19:31
s = set (domanda) # imposto la variabile s, che contiene il conto delle singole lettere per l'oggetto domanda
No, set() ti ritorna una oggetto iterabile simile a una lista eliminando gli elementi doppi.
E' più semplice leggere il codice che spiegarlo:



>>> set([1,2,3,4,4,4,])
set([1, 2, 3, 4])
>>> set(['a', 'b', 'b', 'b'])
set(['a', 'b'])
>>>



set (["a","b","c","d","f","g"]) # setto verso quali parametri deve contare
No, funziona in tutt'altro modo (vedi sopra).


for x in s: # creo un ciclo, che attraversa s, e quindi domanda.. però non ho capito la x che significa
La x è una variabile che ad ogni ciclo che compi nel for assume un valore diverso. Es:



>>> for x in 'ciao':
... print x
...
c
i
a
o
>>>


Leggi bene il tutorial base perchè il for è proprio una delle prime cose che devi capire.

cleaner
07-01-2008, 20:18
ok allora ripasso il for, è ke sto seguendo una guida consigliata da python italia, e per ora ha affrontato prima il while..grazie mille :D

Loading