Foros del Web » Programando para Internet » Python »

Sobre clases y random

Estas en el tema de Sobre clases y random en el foro de Python en Foros del Web. Buenos días amigos! Hoy traigo dos preguntas, una sobre clases y otra sobre el módulo random. La primera ya me había surgido hace tiempo pero ...
  #1 (permalink)  
Antiguo 23/05/2012, 07:40
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Sobre clases y random

Buenos días amigos! Hoy traigo dos preguntas, una sobre clases y otra sobre el módulo random. La primera ya me había surgido hace tiempo pero como pude solucionarlo no le di importancia. Supongamos que tengo una clase Person como esta:
Código Python:
Ver original
  1. class Person():
  2.     hobbies = []
  3.  
  4. jeremy = Person()
  5. bob = Person()
  6. jeremy.hobbies.append('reading comics')
  7. bob.hobbies # ['reading comics']
El problema está en que la propiedad hobbies es la misma para todas las instancias de la clase. Para solucionarlo hago esto:
Código Python:
Ver original
  1. class Person():
  2.     hobbies = []
  3.    
  4.     def __init__(self):
  5.         self.hobbies = self.hobbies[:] # actual copy
Sin embargo no sé si esta es la solución más correcta/ortodoxa, ni por qué es necesario hacerlo.
La segunda pregunta está relacionada con el módulo random. Ahora por ejemplo cada persona tiene una puntuación, y quiero elegir un aleatoriamente teniendo más probabilidades de salir la que más puntos tenga. Hasta ahora estoy haciéndolo así:
Código Python:
Ver original
  1. def choose_person(people):
  2.     points = [person.points for person in people]
  3.     total = sum(points)
  4.     rand = random.randint(0, total)
  5.    
  6.     for i in xrange( len(points) ):
  7.         if rand > points[i]:
  8.             rand -= points[i]
  9.             continue
  10.         else:
  11.             return people[i]
La pregunta es, ¿existe algún método en el módulo random que haga esto mismo?
Espero vuestras respuestas.
Saludos y gracias de antemano (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #2 (permalink)  
Antiguo 23/05/2012, 08:42
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: Sobre clases y random

Código Python:
Ver original
  1. class Person():
  2.     hobbies = []
  3.  
  4. jeremy = Person()
  5. bob = Person()
  6. jeremy.hobbies.append('reading comics')
  7. bob.hobbies # ['reading comics']
Lo que pasa es que esto es un miembro publico estatico. Lo que significa que es el mismo para todas las instancias.


Código Python:
Ver original
  1. class Person():
  2.     def __init__(self):
  3.         self.hobbies = []
Lo que pasa es que en el "constructor" inicias este miembro y lo hace para cada instancia.


Cita:
Iniciado por _cronos2 Ver Mensaje
La segunda pregunta está relacionada con el módulo random. Ahora por ejemplo cada persona tiene una puntuación, y quiero elegir un aleatoriamente teniendo más probabilidades de salir la que más puntos tenga.
Esto dependiendo de lo quieras, puede ser "random weighted choice" (para el caso de 1) o "random weighted sample" (para el caso de 0 o mas).

Cita:
Iniciado por _cronos2 Ver Mensaje
La pregunta es, ¿existe algún método en el módulo random que haga esto mismo?
La respuesta es no.

Etiquetas: clases, preguntas, random
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 06:38.