Código Python:
Ver originaldef insereix_llista (l,f):
"""
Afegeix la figura f a la llista l si i nomes si aquesta f no esta present a l.
Pre ={l: llista; f: cadena}
Post={Retorna True en cas que hagi pogut afegir f a la llista l i False en cas contrari.}
"""
afegit=False
i=0
while i<len(l) and not afegit:
if l[i]!=f:
afegit=True
else:
i=i+1
if afegit:
l[i]=f
else:
afegit=False
return afegit
def omplir_parelles (f,c):
"""
Omple tota la matriu amb parelles diferents.
Pre ={f, c: enter positiu}
Post={Retorna una matriu de la mida indicada omplerta amb parelles diferents.}
"""
matriu=omplir(f,c) #Aqui no tengo ni idea que haga este metodo
i=0
while i<len(matriu) : #Recorres las filas de la matriz
figura=lletra_maj_atzar() + str(numero_atzar(9)) #Generas numero al azar
ins=insereix_llista(matriu[i],figura) #Insertas figura en la fila si se puede, pero lo que tendrias que hacer es ver si no esta en toda la matriz
if ins==True: #Checas a ver si lo inserto
p1=posar_figura(matriu, figura) #Lo vuelves a insertar
p2=posar_figura(matriu, figura) #Lo mismo aqui
i=i+1 #Incrementas
else:
i=i+1 #Incrementas de todos modos, mmmmm....
return matriu #Regresas la matriz
def posar_figura (m, fig) :
"""
Col.loca aleatoriament la figura indicada en una casella buida de la matriu.
Pre ={m: matriu}
Post={Retorna True en cas que s'hagi pogut col.locar la figura a la matriu; False en cas contrari.}
"""
posat=False
llista_casellas=[]
for i in range (len(m)):
for j in range (len(m[i])): #Recorres la matriz
if m[i][j]=='_': #Hasta encontrar un "_"
llista_casellas.append((i*10)+j) #Añades i*10+j a la lista
posat=True
x=numero_atzar(len(llista_casellas)-1) #Me imagino que regresa un numero al azar entre 0 y n
posicio1=llista_casellas[x]//10
posicio2=llista_casellas[x]%10
m[posicio1][posicio2]=fig
return posat
Revise tu código, te recomiendo documentar cada bloque que hagas(No cada linea). Ir pensando en dividir todo el problema en partes. La verdad tu código no es difícil de leer por que gracias a dios esta hecho en python, pero si es difícil de comprender, por que haces muchas cosas de una forma no muy "pythonica", reinventas la rueda, etc.
Solo para ponerte un ejemplo reescribe tu función insertar en lista
Código:
def insertar_en_lista(lista, figura):
if figura in lista:
lista.append(figura)
return True
return False
Mucho mas legible, compacto, rápido, elegante que tu código actual.
También te recomiendo usar un entorno integrado, como el netbeans o el eclipse con plugins para python, que te muestran tus errores mientras vas tecleando ciertamente no te hace un mejor programador pero por lo menos te das cuenta de tus errores mas rápido.