Documentación+interna

María Fernanda Martínez 11176 José Rodrigo Morales 11608 Luis Daniel Muñoz 11105

Documentación interna
 * 1) -*- coding: cp1252 -*-
 * 2) Nombre del archivo: proyecto3.py


 * 1) Autores:
 * 2) María Fernanda Martínez
 * 3) José Rodrigo Morales
 * 4) Luis Daniel Muñoz


 * 1) Proposito del programa:
 * 2) Simular el funcionamiento real de un ascensor en un edificio de 12 pisos.


 * 1) Fecha de creación: del 30 de abril al 26 de mayo de 2011

import random #Para las opciones que necesitan numeros aleatorios import time #Para las funciones que requieren de una pausa import pygame #Para importar las imagenes
 * 1) Se importan los modulos a utilizar

from pylab import * #Para hacer la grafica


 * 1) Definicion de funciones
 * 1) Definicion de funciones

SCREEN_WIDTH = 620 SCREEN_HEIGHT = 600
 * 1) Se define el ancho y alto de la pantalla a desplegar

def historia: p = random.randint(1,12) print "Usted se encuentra en un edificio de 12 pisos. Se encuentra muy cansado para trasladarse por las escaleras y decide tomar el ascensor." print "El ascensor se encuentra en el piso",p time.sleep(8) pygame.init#Se inicia pygame para poder desplegar la imagen screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("ELEVADOR PISO "+str(p)) ele = pygame.image.load("elevador piso "+str(p)+".bmp").convert screen.blit(ele,(0,0)) pygame.display.flip return p
 * 1) Se define la funcion que despliega la situacion del usuario.
 * 2) No recibe parámetros
 * 3) Regresa p que es el piso donde se encuentra el ascensor.
 * 4) La funcion fue creada entre el 4 y 7 de mayo, se agrego la imagen el 24 de mayo.

def pisos: piso = int(raw_input("¿A qué piso desea ir?\n")) while piso<=0 or piso > 12: print "El edificio tiene solamente 12 pisos" piso = int(raw_input("Ingrese el numero de piso al que desea ir\n")) pi.append(piso) return piso
 * 1) Se define la funcion que crea una lista para los pisos que se desean ir con el ascensor.
 * 2) No recibe parámetros
 * 3) Regresa piso, que es el ultimo piso al que la persona desea ir.
 * 4) La funcion fue creada entre el 4 y 7 de mayo.

def estar: estar = int(raw_input("¿En qué piso se encuentra usted?\n")) while estar<=0 or estar > 12: print "Eso es imposible! El edificio tiene solamente 12 pisos" estar = int(raw_input("¿En qué piso se encuentra usted?\n")) pygame.init screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("ELEVADOR PISO "+str(estar)) ele = pygame.image.load("elevador piso "+str(estar)+".bmp").convert screen.blit(ele,(0,0)) pygame.display.flip return estar
 * 1) Se define la función para que el usuario ingrese el piso en el que se encuentra y despliega una imagen de su posicion.
 * 2) No recibe parámetros.
 * 3) Regresa estar, que es el piso en el que se encuentra el usuario.
 * 4) La función fue creada entre el 4 y 7 de mayo.

def trayecto(H,estar): if estar == 12: seguir = 'BAJAR' elif estar == 1: seguir = 'SUBIR' elif estar == H: seguir = raw_input("Usted desea subir o bajar? \n") elif estar>H: seguir = raw_input("Usted desea subir o bajar? \n") if seguir.upper == 'SUBIR': pass else: print "El ascensor tiene un trayecto contrario, deberá espererar un rato" time.sleep(6) print "El ascensor ha llegado" elif estar<H: seguir = raw_input("Usted desea subir o bajar? \n") if seguir.upper == 'BAJAR': pass else: print "El ascensor tiene un trayecto contrario, deberá espererar un rato" time.sleep(6) print "El ascensor ha llegado" return seguir
 * 1) Se define el trayecto que seguirá el ascensor. Si la persona se encuentra en el piso 12, el ascensor debe bajar. Si se encuentra en el piso 1, debe subir
 * 2) Si se encuentra en cualquier otro piso, el usuario puede decidir si subir o bajar. Si el ascensor lleva el mismo trayecto que el usuario desea seguir,
 * 3) entonces el ascensor se detiene para seguir con el proceso, pero si es el trayecto contrario, el ascensor terminará la orden que llevaba (como funciona
 * 4) en realidad) y regresará por el usuario.
 * 5) Recibe el parámetro H, que es el piso en el que se encuentra el ascensor; y el parámetro estar, que es el piso en el que se encuentra el usuario.
 * 6) Regresa seguir, que es el trayecto que realizará el ascensor.
 * 7) La función fue creada del 20 al 22 de mayo.

def personas(vienen): if vienen == 0: pe = 0 print "El ascensor llega vacío" elif vienen == 1: pe = 50 print "En el ascensor ya hay una persona" elif vienen == 13: pe = 899 print "El ascensor está lleno" else: print "En el ascensor ya hay",vienen,"personas" pe = 65*vienen return pe
 * 1) Se define la cantidad de personas que llegarán en el ascensor (como ocurre en cualquier edificio). Además, se calcula un peso aproximado dependiendo
 * 2) de la cantidad de personas que ya vayan en el ascensor, ya que este tiene un límite de peso.
 * 3) Recibe como parámetro vienen, que es la opción aleatoria de la cantidad de personas que ya van en el ascensor.
 * 4) Regresa el valor de pe, que es el peso total de las personas que van en el ascensor.
 * 5) Fue creada entre el 20 y 22 de mayo.

def peso_total(L,P,C): i = 1 while i <= C: print "Ingrese el peso en kg de la persona",i, peso = float(raw_input("con sus objetos\n")) while peso <= 0. or peso >= 150.: print "El peso debe ser positivo y menor que 150 kg" peso = float(raw_input("Ingrese el peso en kg de la persona con sus objetos\n")) L.append(peso) P = P + peso i = i + 1 return P
 * 1) Se define el peso total que llevará el ascensor cuando todas las personas hayan subido.
 * 2) Recibe como parametros L, que es una lista que se formará con los pesos, P que es la suma de todos los pesos (inicia en 0), y C que es la cantidad de personas
 * 3) que subirán al ascensor.
 * 4) Regresa el valor P, que es el peso total que se encuentra dentro del ascensor.
 * 5) La funcion fue creada entre el 20 y 22 de mayo.

def sobrecarga(pe,L): while pe > 900.: print "Overload \n El peso máximo que soporta el ascensor es 900 kg" pes = float(raw_input("¿Qué persona bajará? (ingrese el peso)\n")) while not pes in L: print "Ese peso no ha sido ingresado, debe ser uno ya existente" pes = float(raw_input("¿Qué persona bajará? (ingrese el peso)\n")) L.remove(pes) pe = pe - pes return pe
 * 1) Se define el limite de peso que soporta el ascensor. Si el peso total es mayor a 900 kg el ascensor no se moverá porque no soporta todo ese peso. De lo contrario,
 * 2) sigue su trayecto normal.
 * 3) Recibe como parámetros pe, que es el peso total dentro del ascensor, y L que es la lista de los pesos ingresados. Esta ultima se debe tomar en cuenta, ya que
 * 4) si hay sobrepeso, alguna persona debe bajarse, y como se ingresa el peso de alguna de las personas que bajarán, estas deben estar en la lista para ser valido
 * 5) Si no está en la lista el ascensor no lo toma en cuenta y sigue sin moverse.
 * 6) Regresa el valor pe, que es el nuevo peso sin sobrecarga.
 * 7) La funcion fue creada entre el 4 y 7 de mayo.

def luz(n,A): if n == 0:#Solo si el contador es igual a 0, ocurrira el apagon. if A == 1:#Si la variable A (que es una opcion aleatoria) es igual a 1 ocurre el apagón. time.sleep(2) pygame.init screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("SORPRESA!") sor = pygame.image.load("apagon.png").convert screen.blit(sor,(0,0)) pygame.display.flip time.sleep(3) print "-Usted: '¡¿Qué ha sucedido?!'" time.sleep(2) print "..." time.sleep(3) print "-Usted: '¡Auxilio!'" time.sleep(4) print "-Altavoz: 'Se ha ido la luz, por favor espere unos minutos en lo que encendemos la planta eléctrica'" time.sleep(2) print "-Altavoz: 'Por favor mantener la calma, enseguida funcionará el ascensor'" for i in range(10): print "" for j in range(3): time.sleep(1) print ".", time.sleep(2) print "\nLa luz regresa" time.sleep(2) print "El ascensor se mueve de nuevo" print "-Altavoz: 'Gracias por mantener la calma, todo está en orden'" else: pass else: pass
 * 1) Se define un apagón y como reacciona el usuario ante tal situación.
 * 2) Recibe como parámetro n, que es un contador, y A que es la opcion que decide si ocurre el apagón o no.
 * 3) No hay valor de regreso.
 * 4) La función fue creada el 26 de mayo.

from visual import * def imagen(n): f = frame box(pos=(0,0,0),size=(10,12,0), color = color.white) if n == 12: box(pos=(0,5.5,0.1),size = (0.5,1,0),color=color.blue) elif n == 11: box(pos=(0,4.5,0.1),size = (0.5,1,0),color=color.yellow) elif n == 10: box(pos=(0,3.5,0.1),size = (0.5,1,0),color=color.red) elif n == 9: box(pos=(0,2.5,0.1),size = (0.5,1,0),color=color.cyan) elif n == 8: box(pos=(0,1.5,0.1),size = (0.5,1,0),color=color.black) elif n == 7: box(pos=(0,0.5,0.1),size = (0.5,1,0),color=color.magenta) elif n == 6: box(pos=(0,-0.5,0.1),size = (0.5,1,0),color=color.green) elif n == 5: box(pos=(0,-1.5,0.1),size = (0.5,1,0),color=color.blue) elif n == 4: box(pos=(0,-2.5,0.1),size = (0.5,1,0),color=color.yellow) elif n == 3: box(pos=(0,-3.5,0.1),size = (0.5,1,0),color=color.red) elif n == 2: box(pos=(0,-4.5,0.1),size = (0.5,1,0),color=color.cyan) elif n == 1: box(pos=(0,-5.5,0.1),size = (0.5,1,0),color=color.black) else: print ""
 * 1) Se importa el módulo para poder realizar la imagen del trayecto del ascensor.
 * 1) Se define la imagen que mostrará la imagen del ascensor en el piso al que la persona deseó ir.
 * 2) Recibe como parámetro n, que es el piso en el que el ascensor se detiene.
 * 3) No tiene valor de regreso
 * 4) La función fue creada el 24 de mayo.

def mover_ascensor(S,pi,E,k,u,A): if S.upper == 'BAJAR':#Si el usuario desea bajar, se ejecuta lo que sigue. if min(pi)>E:#Si el usuario ingreso pisos en sentido contrario al trayecto decidido no se ejecuta lo deseado. print "El trayecto es contrario a los pisos marcados" pass else: for n in pi:#Si el piso es mayor que el piso en el que el usuario se encuentra, se elimina de la lista. if n > E: print "El piso",n,"es contrario al trayecto del ascensor por lo que no irá a ese piso" pi.remove(n) for n in pi:#El proceso anterior se repite porque no todos los elementos se borran en el primer intento. if n > E: print "El piso",n,"es contrario al trayecto del ascensor por lo que no irá a ese piso" pi.remove(n) pi.sort#Se ordenan los pisos de menor a mayor pi.reverse#Se invierte la lista para poder realizar el trayecto correcto de arriba hacia abajo. for n in pi:#Se verifica que los elementos no esten repetidos en la lista. m = pi.count(n) if m > 1: pi.remove(n) for n in pi:#Se verifica de nuevo ya que a la primera no se eliminan todos. m = pi.count(n) if m > 1: pi.remove(n) while k > 0:#Se comienza la repeticion para ir a todos los pisos deseados. print "La puerta del ascensor se cierra" time.sleep(2) #Se intercalan varias pausas para hacerlo más real. print "El ascensor se mueve" if u == 0:#Se inicia el proceso para decidir si habrá un apagón o no. if A == 1: luz(u,A) u = u+1#Se aumenta el contador para que no vuelva a ocurrir otro apagón ya que se ha encendido la planta eléctrica. else: pass time.sleep(abs(E-max(pi))*2.5)#En esta pausa se intenta simular el tiempo que tarda el ascensor en moverse por cada piso. print "El ascensor ha llegado al piso",max(pi)#El numero maximo de la lista es el que se despliega ya que va de arriba hacia abajo. time.sleep(2) print "La puerta del ascensor se abre" time.sleep(4) imagen(max(pi))#Se muestra la imagen del ascensor if len(pi)== 1:#Si la longitud de la lista es igual a 1, es decir ya solo queda un elemento en la lista, se termina la repeticion(por si el contador aun no termina) break else:#Se despliega un mensaje para que el ascensor continue su trayecto, esto es porque a veces las personas se tardan mucho en bajar porque llevan paquetes resp = raw_input("¿Ya han bajado las personas de este piso? (presione ENTER para indicar que el ascensor puede continuar con su trayecto)\n") E = max(pi)#El piso en el que se encuentra el ascensor es el numero maximo de la lista pi.remove(max(pi))#Se elimina el numero maximo de la lista ya que este ya fue visitado. k = k - 1
 * 1) Se define el movimiento del ascensor, ya sea para arriba o para abajo.
 * 2) Recibe como parámetros: S, es el trayecto que el usuario eligió anteriormente; pi, es la lista de los pisos a los que se desea ir; E, es el piso en el
 * 3) usuario se encuentra; k es un contador.
 * 4) No tiene valor de regreso.
 * 5) La funcion fue creada entre el 20 y 22 de mayo.

if S.upper == 'SUBIR':#Si el usuario desea subir, se ejecuta lo que sigue if max(pi)<E:#Si el usuario ingresó pisos en sentido contrario al trayecto elegido no se ejecuta el programa. print "El trayecto es contrario a los pisos marcados" pass else: for n in pi:#Si los pisos ingresados estan mas abajo del piso del que se encuentra el usuario, se elimina de la lista if n < E: print "El piso",n,"es contrario al trayecto del ascensor por lo que no irá a ese piso" pi.remove(n) for n in pi:#Se repite el proceso anterior porque no se eliminan todos los elementos a la primera. if n < E: print "El piso",n,"es contrario al trayecto del ascensor por lo que no irá a ese piso" pi.remove(n) pi.sort#Se ordenan los datos de menor a mayor para realizar el trayecto adecuado for n in pi:#Se verifica que no hayan pisos repetidos m = pi.count(n) if m > 1: pi.remove(n) for n in pi:#Se verifica de nuevo ya que no se borran todos en la primera. m = pi.count(n) if m > 1: pi.remove(n) while k > 0:#Se inicia la repeticion print "La puerta del ascensor se cierra" time.sleep(2) print "El ascensor se mueve" if u == 0:#Se inicia la decision de si habrá apagón o no. if A == 1: luz(u,A) u = u+1#Se aumenta el contador para que no ocurra otro apagón, ya que se ha encendido la planta eléctrica. time.sleep(abs(min(pi)-E)*2.5) print "El ascensor ha llegado al piso",min(pi)#Se muestra el número mas pequeño de la lista ya que es el primer piso de abajo hacia arriba time.sleep(2) print "La puerta del ascensor se abre" time.sleep(4) imagen(min(pi))#Se despliega la imagen que muestra la posicion del ascensor. if len(pi)==1:#Si ya solo queda un piso en la lista se termina la repeticion break else: resp = raw_input("¿Ya han bajado las personas de este piso? (presione ENTER para indicar que el ascensor puede continuar con su trayecto)\n") E = min(pi)#El piso en el que se encuentra el ascensor es el numero mas pequeño de la lista pi.remove(min(pi))#Se elimina el numero mas pequeño de la lista ya que este ya fue visitado k = k - 1 else:#Si ingresa un movimiento invalido el ascensor no se puede mover print ""

def funcionamiento(vienen,L,P,pi,PISO,s,E,u,A): C = int(raw_input("¿Cuántas personas subirán al ascensor?\n")) a = vienen + C while a <= 0 or a > 13: print "Debe ser por lo menos una persona y un máximo de 13" C = int(raw_input("Ingrese la cantidad de personas que desean subir al ascensor\n")) a = vienen + C PT = peso_total(L,P,C) SO = sobrecarga(PT,L) while PISO.upper == 'SI': a = pisos while a == E: print "Usted ya se encuentra en ese piso" del pi[len(pi)-1] a = pisos s=s+1 PISO = raw_input("¿Algún otro piso? (si o no)\n") k = len(pi) mover_ascensor(S,pi,E,k,u,A) time.sleep(5) print "El ascensor continua con su trayecto"
 * 1) Se define el funcionamiento del ascensor.
 * 2) Recibe como parametros: vienen, es la cantidad de personas que ya vienen en el ascensor; L, es la lista de los pesos de las personas; P, es el peso de las
 * 3) personas que vienen en el ascensor; pi, es la lista de los pisos a visitar; PISO es para iniciar la repeticion de ingresar los pisos a visitar; s es un contador
 * 4) E es el piso en el que se encuentra el usuario.
 * 5) No hay valor de regreso.
 * 6) La funcion fue creada del 20 al 22 de mayo.

def grafica(lp): if len(lp)==1: labels = ['Persona 1'] elif len(lp)==2: labels = ['Persona 1','Persona 2'] elif len(lp)==3: labels = ['Persona 1','Persona 2','Persona3'] elif len(lp)==4: labels = ['Persona 1','Persona 2','Persona 3','Persona4'] elif len(lp)==5: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5'] elif len(lp)==6: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6'] elif len(lp)==7: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7'] elif len(lp)==8: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7','Persona 8'] elif len(lp)==9: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7','Persona 8','Persona 9'] elif len(lp)==10: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7','Persona 8','Persona 9','Persona 10'] elif len(lp)==11: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7','Persona 8','Persona 9','Persona 10','Persona 11'] elif len(lp)==12: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7','Persona 8','Persona 9','Persona 10','Persona 11','Persona 12'] elif len(lp)==13: labels = ['Persona 1','Persona 2','Persona 3','Persona4','Persona 5','Persona 6','Persona 7','Persona 8','Persona 9','Persona 10','Persona 11','Persona 12','Persona 13'] else: print "El numero excede el limite" datos = (lp) xlocations = array(range(len(datos)))+0.5 width = 0.5 bar(xlocations,datos,width=width,color='green') xticks(xlocations+width/2,labels) ylabel = ('Peso total') title('Peso de las personas que ingresaron al ascensor') show
 * 1) Se define la grafica que mostrara los pesos de las personas que ingresaron al ascensor.
 * 2) Recibe como parametro lp, que es la lista de los pesos de las personas que ingresaron al ascensor.
 * 3) No tiene valor de regreso.
 * 4) La función fue creada el 25 de mayo.


 * 1) Termina definicion de funciones
 * 1) Termina definicion de funciones


 * 1) Inicia programa principal
 * 1) Inicia programa principal

bienvenida = "BIENVENIDOS A ELEVADOR PYTHON" print bienvenida.center(90)
 * 1) Se da la bienvenida al programa

H = historia E = estar resp = "si" u = 0
 * 1) Se invoca a la función historia y el valor de regreso se asigna a la variable H.
 * 1) Se invoca la función estar y el valor de regreso se asigna a la variable E
 * 1) Se asigna un valor para iniciar la repetición

while resp.upper == 'SI': if H == E: print "La puerta del ascensor se abre" else:#Si no son iguales las variables, el usuario debe esperar a que el ascensor llegue. print "Debe esperar un momento" time.sleep(abs(H-E)*2.5) print "El ascensor ha llegado" S = trayecto(H,E) vienen = random.randint(0,13) if E == 1 or E == 12: vienen = 0 P = personas(vienen) if vienen == 13: esperar = raw_input("¿Desea esperar al siguiente ascensor?\n") if esperar.upper == 'NO': print "No se canse mucho utilizando las gradas :D" break elif esperar.upper == 'SI':#Si el usuario decide esperar, el ascensor se terminara su recorrido y volvera por el. time.sleep(6) print "El ascensor ha llegado y se encuentra vacío" L = []#Se asigna la lista para los pesos pi = []#Se asigna la lista para los pisos a visitar PISO = 'si'#Se da la respuesta para iniciar una repeticion s = 0#Se inicia un contador A = random.randint(1,3) funcionamiento(0,L,0,pi,PISO,s,E,u,A)#Se invoca a la funcion funcionamiento para que el ascensor realice su tarea, la primera y tercera variable toman el valor de 0 porque el ascensor llega vacio y el P que va es 0. print "(Cerrar grafica para continuar)"#Se le pide al usuario que cierre la grafica para continuar ya que si no se cierra el programa no continua ejecutandose grafica(L)#Se invoca a la funcion grafica con la variable L (pesos) resp = raw_input("¿Desea usar de nuevo el ascensor? (si para continuar)\n")#Se pregunta al usuario si continuar o no para que se repita el programa if resp.upper=='SI':#Si la respuesta es que si, el piso en el que se encuentra el usuario es el ultimo en que se bajó. E = pi[0] print "Usted se encuentra en el piso",E H = random.randint(1,12)#El ascensor continuo con su trayecto por lo que puede encontrarse en un piso diferente print "El ascensor se encuentra en el piso",H if A == 1: u = 1 else: print "Esperamos que el traslado haya sido agradable, buen día :)"#Si la persona ya no usara el ascensor, se hace una despedida else: print "Su respuesta no es valida" else:#Si el ascensor no lleva el limite de personas, se ejecuta lo que sigue. L = []#Se asigna la lista para los pesos de las personas que ingresen al ascensor pi = []#Se asigna la lista para los pisos a visitar. PISO = 'si'#Se asigna la respuesta para iniciar una repeticion s = 0#Se inicia un contador. A = random.randint(1,3) funcionamiento(vienen,L,P,pi,PISO,s,E,u,A)#Se invoca la funcion funcionamiento con las variables vienen,L,P,pi,PISO,s y E print "(Cerrar grafica para continuar)" grafica(L)#Se invoca la funcion grafica con la variable L. resp = raw_input("¿Desea usar de nuevo el ascensor? (si para continuar)\n")#Se pregunta al usuario si desea continuar o no para ejecutar la repeticion if resp.upper=='SI':#Si la respuesta es si, el psio en el que se encuentra el usuario es el ultimo en el que se quedó. E = pi[0] print "Usted se encuentra en el piso",E H = random.randint(1,12)#El ascensor continuó con su trayecto por lo que puede estar en un piso diferente. print "El ascensor se encuentra en el piso",H if A == 1: u = 1 else: print "Esperamos que el traslado haya sido agradable, buen día :)"#Si el usuario ya no usará el ascensor, se hace una despedida.
 * 1) Inicia la repetición para usar el ascensor.
 * 1) Si la H (piso del ascensor) es igual a E (piso del usuario) la puerta del ascensor se abre.
 * 1) Se invoca a la función trayecto con las variables H, E; y el valor de regreso se asigna a la varaible S.
 * 1) Se elige al azar el numero de personas que vienen en el ascensor y se asignan a la variable vienen.
 * 1) Si el piso en el que se encuentra el usuario es igual a 1 o 12, el ascensor llega vacío o ahí mismo se vacía.
 * 1) Se invoca a la funcions personas con la variable vienen y el valor de regreso se asigna a la variable P.
 * 1) Si la cantidad de personas que van en el ascensor es 13, el ascensor está lleno por lo que el usuario decide si esperar otra vez o no usarlo.


 * Para ver el pdf y el archivo original, diríjase a DESCARGAS.**