Problema con il metodo index

Stato
Discussione chiusa ad ulteriori risposte.

xevier

Utente Silver
16 Febbraio 2009
42
8
0
63
Salve a tutti, ho ripreso da qualche giorno un mio vecchio programma sul gioco dell'impiccato; ho ridotto notevolmente la lunghezza del programa , ma ho ancora un problema con il modulo index applicato su una lista.

Il programma è questo: http://pastebin.com/m935fc00

Praticamente il problema si verifica quando cerco la posizione di una lettera che è presente più di una volta nella lista, in quanto il metodo index restituisce solo la posizione della prima lettera , che in questo caso è la lettera ' t ' . Please help T_T.
 
E che cosa vuoi? Vuoi ottenere tutti gli indici?
Mmh, non ricordo se c'é qualcosa che lo faccia builtin, comunque ti scrivo una funzione che lo fa.
Codice:
def listcount(lista, item):
	"""Searches item in lista and returns a list with all the indexes."""
	pos = []
	i = 0
	for li in lista:
		if li==item: pos.append(i)
		i+=1
	return pos
In sostanza lo richiami passando la lista in cui cercare e cosa cercare, e ti restituisce una lista con gli indici in cui è presente.

Ci sarebbe anche un procedimento ricorsivo che puoi utilizzare, ma ti lascio il compito di implementarlo tu se vuoi, perché è istruttivo.
Semplicemente, trovi l'indice del primo elemento, e tagli la lista fino a quel punto, per poi cercare in ciò che rimane, finché non trovi più un indice (cioè non c'é né più).
Basta che utilizzi l'operatore in, il metodo index(), lo slicing e la ricorsione.

E fatti un favore, passa a Python 3.
 
Ok grazie mille, il programma funziona perfettamente ^^. Adesso mi metto subito a farlo con il procedimento ricorsivo .

http://pastebin.com/m6395b890

Codice:
y = ['a','s','p','e','t','t','o']
u = ['*'] * len(y)
print u
print "scoprire la parola nascosta"
i = 0
s = ''.join(y)
k = raw_input("Inserire la parola o lettera: ")

def listcount(lista, item):
    pos = []
    i = 0
    for li in lista:
        if li==item: pos.append(i)
        i+=1
    return pos

while i < 6:
    if i == 5:
        print i+1,"errori su 6"
        print "Game over"
        break
    if k in y :
        x = listcount(y, k)
        for a in x:
            u[a] = k 
        print u
        print i,"errori su 6"
        k = raw_input("Inserire la parola o lettera: ")
    elif k == s :
        print "hai indovinato!"
        break
    else:
        print "sbagliato!"
        i = i+1
        print i,"errori su 6"
        k = raw_input("Inserire la parola o lettera: ")

Riguardo python 3 , non so se usarlo o no, perchè al momento sto studiando un libro su python inerente alla versione 2.5
 
Beh, ti consiglierei di passare a Python 3.
Le basi sono sempre le stesse, e ti conviene imparare direttamente Python 3 invece di aggiornarti dopo.
 
sydarex ha detto:
Beh, ti consiglierei di passare a Python 3.
Le basi sono sempre le stesse, e ti conviene imparare direttamente Python 3 invece di aggiornarti dopo.

sydarex ha ragione, io nn sono ancora passato per una questione di librerie, ma fidati, imparare subito quello nuovo è meglio che dover abituarsi alle variazioni..
 
Stato
Discussione chiusa ad ulteriori risposte.