Foros del Web » Programando para Internet » Python »

Duda sobre python

Estas en el tema de Duda sobre python en el foro de Python en Foros del Web. Alguien me podria resolver este problema, pro mas k lo intento no me sale. Gracias 1. Insertar en la lista Escriba una función en Python ...
  #1 (permalink)  
Antiguo 12/12/2010, 13:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Duda sobre python

Alguien me podria resolver este problema, pro mas k lo intento no me sale.
Gracias

1. Insertar en la lista
Escriba una función en Python que dada una lista le una figura
añada la figura en la lista si y sólo si esta figura no está presente
en la lista. Devuelve True si ha podido añadir la figura en la lista y False en
caso contrario. La cabecera es:
def insereix_llista (l, f)
"" "
Añade la figura hace la lista del si y sólo si esta
f no está presente en l.

Pre = {l: lista; f: cadena}
Post = {Devuelve True en caso de que haya podido añadir hace la
lista l y False en caso contrario.}
"" "
2. Rellenar tablero con parejas
Escriba una función en Python que, dada un número de filas fin un
de columnas c, crea una matriz de tamaño (FXC), llena de parejas
diferentes. El nombre de cada pareja estará formado por una letra mayúscula
y un número entre 0 y 9. La cabecera es:
def omplir_parelles (f, c)
"" "
Rellena toda la matriz con parejas diferentes.
Pre = {f, c: entero positivo}
Post = {Devuelve una matriz del tamaño adecuado rellenada con
parejas diferentes.}
"" "
Primeramente se deberá crear la figura, por eso, generaremos la letra
mayúscula y el número con la función lletra_maj_atzar y numero_atzar
respectivamente y los uniremos en una única cadena. Si esta figura
no está presente en la matriz (use la función insereix_llista definida antes
en esta sesión) entonces se puede situar dos veces. Llamad dos veces
a la función posar_figura, definida en la prueba 3.

3. Poner figura
Haga una función en Python que dada una matriz y una figura,
coloquio aleatoriamente esta figura en una casilla vacía de la matriz.
Las casillas vacías son aquellas que contienen el carácter '_'. Devuelve
True en caso de que haya podido colocar la figura en la matriz, y False
en caso contrario (no había ninguna casilla vacía en la matriz). La cabecera
es:
def posar_figura (m, fig):
"" "
Coloca aleatoriamente la figura indicada en una casilla
vacía de la matriz.

Pre = {m: matriz}
Post = {Devuelve True en caso de que haya podido colocar la
letra en el array False en caso contrario.}
"" "
Para hacer esta función habrá que usar la función numero_atzar que habéis hecho a
la prueba 1. (Esta funcion ya la tengo no Haces Falta k me la digais)
  #2 (permalink)  
Antiguo 12/12/2010, 14:05
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda sobre python

También deberías postear lo que estas intentando hacer o sea el código que llevas hecho.

No me molesta resolver dudas, pero venir aquí y pedir que te hagan tu tarea por favor, tener mas decencia.

Por favor, plantea dudas concretas.
  #3 (permalink)  
Antiguo 12/12/2010, 14:13
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Duda sobre python

tienes razon lo siento por ponerte el problema tal qual, aqui tienes lo que yo he hecho:

def 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)
i=0
while i<len(matriu) :
figura=lletra_maj_atzar() + str(numero_atzar(9))
ins=insereix_llista(matriu[i],figura)
if ins==True:
p1=posar_figura(matriu, figura)
p2=posar_figura(matriu, figura)
i=i+1
else:
i=i+1
return matriu

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])):
if m[i][j]=='_':
llista_casellas.append((i*10)+j)
posat=True
x=numero_atzar(len(llista_casellas)-1)
posicio1=llista_casellas[x]//10
posicio2=llista_casellas[x]%10
m[posicio1][posicio2]=fig
return posat

el problema es que no me rellena la matriz entera y ademas solo tiene que ser con parejas diferentes.
gracias de nuevo.
  #4 (permalink)  
Antiguo 12/12/2010, 14:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda sobre python

Código Python:
Ver original
  1. def insereix_llista (l,f):
  2.     """
  3.    Añade la figura f a la lista si y sólo si esta f no está presente en l.
  4.    Pre = {l: lista; f: cadena}
  5.    Post = {Devuelve True en caso de que haya podido añadir hace la lista le False en caso contrario.}
  6.    """
  7.     #Aqui tal vez te interese, la sentencia in.

Ejemplo de uso de in:
Código:
l = [1, 2, 3]
if 5 in l:
    print "5 esta en l"
else:
    print "5 no esta el l"
Código Python:
Ver original
  1. def omplir_parelles (f,c):
  2.     """
  3.    Rellena toda la matriz con parejas diferentes.
  4.    Pre = {f, c: entero positivo}
  5.    Post = {Devuelve una matriz del tamaño adecuado rellenada con parejas diferentes.}
  6.    """


Código Python:
Ver original
  1. def posar_figura (m, fig) :
  2.     """
  3.    Coloca aleatoriamente la figura indicada en una casilla vacía de la matriz.
  4.    Pre = {m: matriz}
  5.    Post = {Devuelve True en caso de que haya podido colocar la figura en la matriz; False en caso contrario.}
  6.    """
  7.     #Aqui tambien puedes usar shuffle o choice tambien del modulo random

En estos últimos 2 casos deberías de generar todas las combinaciones y hacer un shuffle y tomar los primeros f*c elementos.
Si una figura es una letra y un numero. Entonces tienes 260 posibles figuras.
A-Z 26 letras y 0-9 10 dígitos.
  #5 (permalink)  
Antiguo 12/12/2010, 15:25
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Duda sobre python

pero sabrias decirme porque en la funcion omplir_parelles no me rellena todas las casillas y porque se me repiten las figuras.
gracias.
  #6 (permalink)  
Antiguo 12/12/2010, 21:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda sobre python

Código Python:
Ver original
  1. def insereix_llista (l,f):
  2.     """
  3.    Afegeix la figura f a la llista l si i nomes si aquesta f no esta present a l.
  4.    Pre ={l: llista; f: cadena}
  5.    Post={Retorna True en cas que hagi pogut afegir f a la llista l i False en cas contrari.}
  6.    """
  7.     afegit=False
  8.     i=0
  9.     while i<len(l) and not afegit:
  10.         if l[i]!=f:
  11.             afegit=True
  12.         else:
  13.             i=i+1
  14.     if afegit:
  15.         l[i]=f
  16.     else:
  17.         afegit=False
  18.     return afegit
  19.    
  20. def omplir_parelles (f,c):
  21.     """
  22.    Omple tota la matriu amb parelles diferents.
  23.    Pre ={f, c: enter positiu}
  24.    Post={Retorna una matriu de la mida indicada omplerta amb parelles diferents.}
  25.    """
  26.     matriu=omplir(f,c) #Aqui no tengo ni idea que haga este metodo
  27.     i=0
  28.     while i<len(matriu) : #Recorres las filas de la matriz
  29.         figura=lletra_maj_atzar() + str(numero_atzar(9)) #Generas numero al azar
  30.         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
  31.         if ins==True: #Checas a ver si lo inserto
  32.             p1=posar_figura(matriu, figura) #Lo vuelves a insertar
  33.             p2=posar_figura(matriu, figura) #Lo mismo aqui
  34.             i=i+1 #Incrementas
  35.         else:
  36.             i=i+1 #Incrementas de todos modos, mmmmm....
  37.     return matriu #Regresas la matriz
  38.  
  39. def posar_figura (m, fig) :
  40.     """
  41.    Col.loca aleatoriament la figura indicada en una casella buida de la matriu.
  42.    Pre ={m: matriu}
  43.    Post={Retorna True en cas que s'hagi pogut col.locar la figura a la matriu; False en cas contrari.}
  44.    """
  45.     posat=False
  46.     llista_casellas=[]
  47.     for i in range (len(m)):
  48.         for j in range (len(m[i])): #Recorres la matriz
  49.             if m[i][j]=='_': #Hasta encontrar un "_"
  50.                 llista_casellas.append((i*10)+j) #Añades i*10+j a la lista
  51.                 posat=True
  52.     x=numero_atzar(len(llista_casellas)-1) #Me imagino que regresa un numero al azar entre 0 y n
  53.     posicio1=llista_casellas[x]//10
  54.     posicio2=llista_casellas[x]&#37;10
  55.     m[posicio1][posicio2]=fig
  56.     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.
  #7 (permalink)  
Antiguo 13/12/2010, 01:56
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Duda sobre python

el problema que tengo ahora es que me rellena una columna entera con la misma figura.
y lo que quiero conseguir es que solo me ponga una figura en toda la matriz.
llevo horas intentando resolver este problema pero no lo logro.
echarme una mano
gracias

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:51.