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 😛 (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 🙂
mmmmmmmm muy bueno el scrip profe espero q siga publicando mas scrips de python
Me gustaMe gusta
Asi me gusta Facil y versatil :P.
Me gustaMe gusta
justo necesitava una de esas para mi juego con aleatorios
Me gustaMe gusta
My good, si creo que para el jueguito servia, espero que para segundo ciclo tambien me sea útil,,, suba más scripts profe
Me gustaMe gusta
Buena profe 😀
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
Me gustaMe gusta
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
Me gustaMe gusta
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
Me gustaMe gusta
#
if __name__ == ‘__main__’:
usage = «»»usage: shuffle INPUT_FILE»»»
if len(sys.argv) aleatorio
Me gustaMe gusta
no me molestan los comentarios, (los modero por precaucion, cuando akismet no es tan preciso).
Un saludo 🙂
Me gustaMe gusta
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.
Me gustaMe gusta
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
Me gustaMe gusta