fork(1) download
  1. # Examen ALS Parcial 1 - 2015
  2. __author__ = "jbgarcia@uvigo.es"
  3.  
  4. def ordena(l):
  5. """Devuelve una nueva lista ordenada.
  6.  
  7. :param l: La lista a ordenar
  8. :return: Una nueva lista, como l, pero ordenada.
  9. """
  10. toret = []
  11. for x in l:
  12. # Find position in target list
  13. i = 0
  14. while (i < len(toret)
  15. and toret[i] < x):
  16. i += 1
  17.  
  18. toret.insert(i, x)
  19.  
  20. return toret
  21.  
  22. def histograma(l):
  23. """Muestra un histograma por pantalla, usando '*'
  24.  
  25. :param l: La lista de datos a mostrar.
  26. """
  27. def dibuja_barra(x):
  28. print("*{0}".format("*" * x))
  29.  
  30. maxi = max(l)
  31. mini = min(l)
  32. diff = maxi - mini
  33. for x in l:
  34. dibuja_barra((x * 10) // diff)
  35.  
  36. def resta_conjuntos(c1, c2):
  37. """Devuelve un nuevo conjunto con el resultado de restar c2 de c1
  38.  
  39. :param c1: El conjunto del que restar
  40. :param c2: El conjunto a restar
  41. :return: Un nuevo conjunto resultado.
  42. """
  43. toret = set()
  44.  
  45. for x in c1:
  46. if x not in c2:
  47. toret.add(x)
  48.  
  49. return toret
  50.  
  51. class Estudiante:
  52. def __init__(self, d, n):
  53. self.__nombre = n
  54. self.__dni = d
  55.  
  56. @property
  57. def nombre(self):
  58. return self.__nombre
  59.  
  60. @property
  61. def dni(self):
  62. return self.__dni
  63.  
  64. def __str__(self):
  65. return "{0}: {1}".format(self.dni, self.nombre)
  66.  
  67. class Nota:
  68. def __init__(self, d, v):
  69. self.__dni = d
  70. self.valor = v
  71.  
  72. @property
  73. def dni(self):
  74. return self.__dni
  75.  
  76. @property
  77. def valor(self):
  78. return self.__valor
  79.  
  80. @valor.setter
  81. def valor(self, x):
  82. self.__valor = x
  83.  
  84. def __str__(self):
  85. return "{0}, {1}".format(self.dni, self.valor)
  86.  
  87. class Asignatura:
  88. def __init__(self, n):
  89. self.__nombre = n
  90. self.__estudiantes = {}
  91. self.__notas = {}
  92.  
  93. @property
  94. def nombre(self):
  95. return self.__nombre
  96.  
  97. def matricula(self, e):
  98. self.__estudiantes[e.dni] = e
  99.  
  100. def califica(self, n):
  101. self.__notas[n.dni] = n
  102.  
  103. def __str__(self):
  104. toret = ""
  105.  
  106. for dni, estudiante in self.__estudiantes.items():
  107. nota = self.__notas.get(dni)
  108.  
  109. if nota != None:
  110. toret += "{0}: {1}\n".format(estudiante, nota.valor)
  111. else:
  112. toret += "{0}\n".format(estudiante)
  113.  
  114. return toret
  115.  
  116. class Aparato:
  117. def __init__(self, c, m, n):
  118. self.__codigo = c
  119. self.__nombre = n
  120. self.__modelo = m
  121.  
  122. @property
  123. def codigo(self):
  124. return self.__codigo
  125.  
  126. @property
  127. def modelo(self):
  128. return self.__modelo
  129.  
  130. @property
  131. def nombre(self):
  132. return self.__nombre
  133.  
  134. def __str__(self):
  135. return "{0}: {1} {2}".format(self.codigo, self.modelo, self.nombre)
  136.  
  137. class AparatoNacional(Aparato):
  138. def __init__(self, c, m, n, p):
  139. Aparato.__init__(self, c, m, n)
  140. self.__provincia = p
  141.  
  142. @property
  143. def provincia(self):
  144. return self.__provincia
  145.  
  146. def __str__(self):
  147. return Aparato.__str__(self) + " provincia: " + self.provincia
  148.  
  149. class AparatoImportacion(Aparato):
  150. def __init__(self, c, m, n, p):
  151. super().__init__(c, m, n)
  152. self.__pais = p
  153.  
  154. @property
  155. def pais(self):
  156. return self.__pais
  157.  
  158. def __str__(self):
  159. return super().__str__() + " pais: " + self.pais
  160.  
  161. # Demo ejercicio 1
  162. print(ordena([7, 5, 9, 2, 4, 8, 6, 3, 1]))
  163.  
  164. # Demo ejercicio 2
  165. histograma([0, 40, 20, 99])
  166.  
  167. # Demo ejercicio 3
  168. print(resta_conjuntos({1, 2, 3}, {2}))
  169.  
  170. # Demo ejercicio 4
  171. e1 = Estudiante(12345678, "Palotes, Perico de los")
  172. e2 = Estudiante(12345679, "Con Tomate, Pan")
  173. print("{0}\n{1}\n".format(e1, e2))
  174.  
  175. a1 = Asignatura("ALS")
  176. a1.matricula(e1)
  177. a1.matricula(e2)
  178. a1.califica(Nota(e1.dni, 7.5))
  179. print(a1)
  180.  
  181. # Demo ejercicio 5
  182. ap1 = AparatoNacional(1, "BlueSens", "Web TV", "Madrid")
  183. ap2 = AparatoImportacion(2, "Apple", "On-Line TV", "EEUU")
  184.  
  185. print(ap1)
  186. print(ap2)
  187.  
  188.  
Success #stdin #stdout 0.02s 8688KB
stdin
Standard input is empty
stdout
[1, 2, 3, 4, 5, 6, 7, 8, 9]
*
*****
***
***********
{1, 3}
12345678: Palotes, Perico de los
12345679: Con Tomate, Pan

12345678: Palotes, Perico de los: 7.5
12345679: Con Tomate, Pan

1: BlueSens Web TV provincia: Madrid
2: Apple On-Line TV pais: EEUU