02 September 2010 ~ 11 Comments

Ejercicio PHP | Ejercicio Python : Sorteo de alumnos

Hace unos días me vi en la necesidad de hacer un rápido sorteo para el orden de presentación de trabajos finales de un curso que dicto. Me pareció muy simple hacer el respectivo sorteo usando PHP, y de paso también decidí hacerlo con Python, gracias a una sugerencia :P (twit).

Antes de empezar debo aclarar que la lista de alumnos se encuentra en un archivo de texto, llamado alumnos6to

Sorteo con PHP:

Voy a obviar algunos detalles en el orden e ire al grano.

Primero almaceno en un array (arreglo) el contenido del archivo alumnos6to

$alumnos = file('alumnos6to');

Luego se puede imprimir el arreglo para visualizar la lista original, se podria hacer con una función creada: imprimir($alumnos):

function imprimir($array){
echo "<ol class='alumnos'>";
foreach ($array as $valor){
echo "<li>$valor</li>";
}
echo "</ol>";
}

Luego se hace la mezcla aleatoria con:

shuffle($alumnos);

Y por ultimo se vuelve a imprimir la lista, ya mezclada aleatóriamente:

imprimir($alumnos);

Y ya se hizo el sorteo.

Sorteo con Python:

Con Python haré el mismo proceso, solo que tendré un archivo resultante llamado: aleatorio, antes de empezar a obtener el contenido del archivo de texto, importé el modulo random, luego importé el contenido del archivo alumnos6to y lo almacené en una lista llamada alumno, usé la función shuffle() que permite mezclar la lista y por ultimo guardé la lista mezclada en el archivo aleatorio..

El código para realizar esto es el siguiente:

from random import *
alumno = []
for nombre in file('alumnos6to'):
alumno.append([nombre])
shuffle(alumno)
aleatorio = file('aleatorio','w')
for nombre in alumno:
aleatorio.write(str(nombre)+'\n')

Los archivos completos pueden ser descargados desde aqui.

Esta es solo una, de las muchas maneras de aleatorizar una lista de elementos.

Happy coding :)

Tags: ,

11 Responses to “Ejercicio PHP | Ejercicio Python : Sorteo de alumnos”

  1. JOEL CHAVEZ 2 September 2010 at 22:41 Permalink

    mmmmmmmm muy bueno el scrip profe espero q siga publicando mas scrips de python

  2. CalinSoft 3 September 2010 at 05:53 Permalink

    Asi me gusta Facil y versatil :P .

  3. anderson 3 September 2010 at 21:40 Permalink

    justo necesitava una de esas para mi juego con aleatorios

  4. Summum 7 September 2010 at 14:09 Permalink

    My good, si creo que para el jueguito servia, espero que para segundo ciclo tambien me sea útil,,, suba más scripts profe

  5. Lobo1 7 September 2010 at 14:10 Permalink

    Buena profe :D
    El codigo es simple, aunque hay algunos comandos que todavia no aprendo…
    Que diferencia entre el codigo python y PHP.
    PD: Summm quizo decir “MY GOD” xD
    Summm es beger xD jajajjaja

  6. neosergio 7 September 2010 at 16:08 Permalink

    Estas semanas ire subiendo mas codigo, ya tengo mas tiempo para eso. :)

    Gracias por lo comentarios.

    Y con respecto a la pregunta entre el codigo python y php, pues hay muchas diferencias, sin embargo ambos son asombrosos lenguajes de programación, puedes leer un poco de ello aca:
    http://www.itech7.com/Programming/Python-vs-PHP-webdev

    Un saludo

  7. skraelings 29 September 2010 at 17:55 Permalink

    hola Sergio!

    algunos comentarios sobre el código (si no te molesta):
    #
    en general se recomienda (pep8) no hacer esto:
    from random import *
    es mejor:
    import random
    es aceptable:
    from random import shuffle
    #
    esto es frecuente y por eso hay una forma idiomática (list comprehension):
    alumno = []
    for nombre in file(‘alumnos6to’):
    alumno.append([nombre])

    por esto:
    alumnos = [alumno for alumno in open(input_file)]
    #
    en el fichero aleatorio que te queda, queda cada nombre dentro de una lista!
    el detalle es que haces alumno.append([nombre]) en lugar de alumno.append(nombre)
    y por eso cuando escribes en aleatorio es innecesario hacer aleatorio.write(str(nombre) + ‘\n’)

    Se puede mejorar si generalizamos un poco, que tal si pasamos cualquier fichero y que nos escupa el fichero con las lineas en orden aleatorio; pero que lo escupa a salida estandar en lugar de guardarlo, finalmente siempre puedes guardarlo redirigiendo la salida estandar o puedes querer hacer algo más con cada linea y puedes mandarlo a otro proceso por una tuberia, básicamente es seguir un poco la filosofía de unix.

    Quizá algo así

    #!/usr/bin/python
    import sys
    import random

    def shuffle(input_file):
    alumnos = [alumno for alumno in open(input_file)]
    random.shuffle(alumnos)
    for alumno in alumnos:
    sys.stdout.write(alumno)

    if __name__ == ‘__main__’:
    usage = “”"usage: shuffle INPUT_FILE”"”
    if len(sys.argv) aleatorio

  8. skraelings 29 September 2010 at 17:58 Permalink

    #
    if __name__ == ‘__main__’:
    usage = “”"usage: shuffle INPUT_FILE”"”
    if len(sys.argv) aleatorio

  9. neosergio 30 September 2010 at 00:00 Permalink

    no me molestan los comentarios, (los modero por precaucion, cuando akismet no es tan preciso).

    Un saludo :)

  10. skraelings 30 September 2010 at 00:32 Permalink

    Desafortunadamente, la última parte no sale como debería porque el parser de los comentarios piensa que la redirección en parte de un tag y lo estropea.

  11. chavez.py 12 October 2010 at 20:38 Permalink

    Los comentarios de >(skraelings)< son muy buenos pero yo pienso q el cod q iso neosergio esta hecho para la gente q re esta iniciando en python pero muy buenos los comentarios me han servido de mucho … xD chavez_punto_py


Leave a Reply

Notify me of followup comments via e-mail. You can also subscribe without commenting.