reto inicial

Chema Cortes py en ch3m4.org
Mie Nov 16 12:08:09 CET 2005


Jorge A. Cortes M. escribió:
> Gracias Chema Cortes.
> Estoy intentando denuevo para ver que me dicen o me aconsejan.

Está bastante mejor. Te comento...


> #!/usr/bin/python
> #Aqui daria las dimensiones de la lista
> lista=['']*20

Has puesto como límite un máximo a 20 personas. Si no tienes cuidado, te
dará error cuando sobrepases este límite.

En python no es preciso dimensionar las variables tal como se hace en
otros lenguajes. Puedes hacer que la lista se vaya expandiendo o
encogiendo según tus necesidades.

Empieza con la lista vacía:

lista=[]

Para añadir un elemento:

lista.append(persona)

Para borrar un elemento:

lista.remove(persona)

ó, si conoces su posición,

del lista[i]

Para saber la cantidad de personas, en lugar de tener un contador que
vaya sincronizado (origen probable de problemas), utiliza ésto:

len(lista)


> 
> #Este es el numero de personas que se encontraron #en una busqueda
> 
> def numero_personas(n_personas):

Como regla de estilo, yo nombraría a la función con algo más ajustado a
lo que se supone que hace. Las funciones son las "acciones" de nuestro
código, de modo similar a lo que un "verbo" es en una oración
gramatical. Yo le pondría, por ejemplo "ObtenerPersonas" ó algo similar
que deje más claro lo que va a hacer.


>     if n_personas == 0:
>         n_personas=int(raw_input('Numero de personas entre los escombros: '))
>         for i in range(n_personas):
>             lista[i]=raw_input('Nombre: ')
>     else:
>         o_n_personas=int(raw_input('Cuantas personas mas entre los
> escombros?: '))
>         n_personas=n_personas+o_n_personas
>         for i in range(n_personas):
>             if lista[i]=='':
>                 lista[i]=raw_input('Nombre: ')
> 
>     return n_personas

Rehaz éste trozo de código. Tienes dos alternativas:

a) pidiendo número de personas a añadir (similar a lo que tenías)

  for i in range(n_personas):
    lista.append(raw_input('Nombre: ')

b) añadir personas hasta que se meta un nombre vacío

  while True:
    s=raw_input('Nombre: ')
    if not s:
      break
    lista.append(s)


> #Se muestran las personas encontradas
> def encontrados(n_personas):
>     print 'La lista de personas '
>     for i in range(n_personas):
>         print i+1, lista[i]

Más "pythónico":

for i,l in enumerate(lista):
    print i+1,l

No hace falta saber el tamaño de la lista.


> #Para sacar a la primera persona que se encontro en la exploracion
> def sacar(n_personas):
>     op='s'
>     while op=='s' or op=='S':
>         op=raw_input('Sacar una persona s/n? ')
>         if op == 's' or op=='S':
>             for i in range(n_personas):
>                 if lista[i]!='':
>                     lista[i]=lista[i+1]

Es algo confuso lo que hace y diría que no funciona como esperas. ¿Lo
has probado?


> def mostrar(n_personas):
>     print 'La nueva lista de personas '
>     for i in range(n_personas):
>         print  lista[i]

¿Qué diferencia tiene que haber entre encontrados() y mostrar()?


> 
> def main():
>     n_personas=0
>     a=1
>     while a==1:
>         print '\tMenu de opciones\n1. Cuantas personas se encontraron?'
>         print '2. Mostrar las personas encontradas\n3. Sacar las
> personas de una en una'
>         print '4. Esta es la lista de personas\n0. Salir del programa'
>         opcion=int(raw_input('Opcion? '))
> 
>         if opcion == 1:
>             n_personas=numero_personas(n_personas)
>         elif opcion == 2:
>             encontrados(n_personas)
>         elif opcion == 3:
>             sacar(n_personas)
>         elif opcion == 4:
>             mostrar(n_personas)
>         elif opcion ==0:
>             a=0
> 
> if __name__=='__main__':
>     main()




Más información sobre la lista de distribución Python-es