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 :)

11 thoughts on “Ejercicio PHP | Ejercicio Python : Sorteo de alumnos

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

  2. 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

  3. 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

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

  5. 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.

  6. 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

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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