fork download
  1. # Examen parcial 2 ALS 2014-15
  2. # coding=UTF-8
  3.  
  4. import unittest
  5. import pickle
  6. import json
  7.  
  8. # Pregunta 1 -----------------------------------------------------------------
  9. class Pieza:
  10. def __init__(self, id, nombre):
  11. self.id = id
  12. self.nombre = nombre
  13.  
  14. def __str__(self):
  15. return str.format("{0}: {1}", self.id, self.nombre)
  16.  
  17. def save():
  18. f = None
  19. try:
  20. f = open("piezas.dat", "wb")
  21. pickle.dump(dictPiezas, f)
  22. finally:
  23. if f != None:
  24. f.close()
  25.  
  26. def load():
  27. dPiezas = {}
  28. f = None
  29. try:
  30. f = open("piezas.dat", "rb")
  31. dPiezas = pickle.load(f)
  32. finally:
  33. if f != None:
  34. f.close()
  35.  
  36. return dPiezas
  37.  
  38. def piezas2str(dp):
  39. toret = "\n"
  40. for p in dp.values():
  41. toret += str(p) + '\n'
  42.  
  43. return toret
  44.  
  45. # Pregunta 2 -----------------------------------------------------------------
  46. class ListaOrdenada:
  47. def __init__(self):
  48. self.l = []
  49.  
  50. def to_list(self):
  51. return self.l.copy()
  52.  
  53. def inserta(self, x):
  54. i = 0
  55.  
  56. while( i < len(self.l)
  57. and self.l[i] < x):
  58. i += 1
  59.  
  60. self.l.insert(i, x)
  61. return
  62.  
  63. def borraEn(self, i):
  64. if (len(self.l) > i):
  65. self.l.pop(i)
  66.  
  67. def __str__(self):
  68. toret = "[ "
  69. for x in l:
  70. toret += str(x) + ' '
  71. toret += ']'
  72. return toret
  73.  
  74. class TestListaOrdenada(unittest.TestCase):
  75. def setUp(self):
  76. self.l = ListaOrdenada()
  77. self.l.inserta(1)
  78. self.l.inserta(4)
  79. self.l.inserta(6)
  80.  
  81. def test_inserta(self):
  82. resultado = [ 1, 2, 3, 4, 5, 6 ]
  83. self.l.inserta(2)
  84. self.l.inserta(3)
  85. self.l.inserta(5)
  86.  
  87. self.assertEqual(resultado, self.l.to_list())
  88.  
  89. def test_borraEn(self):
  90. resultado = [ 1, 6 ]
  91. self.l.borraEn(1)
  92. self.assertEqual(resultado, self.l.to_list())
  93.  
  94. # Pregunta 3 -----------------------------------------------------------------
  95. collatz = lambda n: \
  96. [] if n <= 1 else \
  97. [(3 * n) + 1] + collatz((3 * n) + 1) if n % 2 != 0 else \
  98. [n // 2] + collatz(n // 2)
  99.  
  100. # Pregunta 4 -----------------------------------------------------------------
  101. def invoke(obj, strMth):
  102. toret = None
  103. m = getattr(obj, strMth)
  104. if (m != None
  105. and callable(m)):
  106. toret = m()
  107. return toret
  108.  
  109. # Pregunta 5 -----------------------------------------------------------------
  110. class PuntosPartido:
  111. def __init__(self):
  112. self.puntos = {}
  113.  
  114. def inserta(self, dorsal, nombre):
  115. dorsal = str(dorsal)
  116. self.puntos[dorsal] = {"nombre": nombre, "faltas": 0, "puntos": 0}
  117.  
  118. def ponFalta(self, dorsal):
  119. dorsal = str(dorsal)
  120. self.puntos[dorsal]["faltas"] += 1
  121.  
  122. def ponCanasta(self, dorsal):
  123. dorsal = str(dorsal)
  124. self.puntos[dorsal]["puntos"] += 2
  125.  
  126. def getFaltas(self, dorsal):
  127. dorsal = str(dorsal)
  128. return self.puntos[dorsal]["faltas"]
  129.  
  130. def getPuntos(self, dorsal):
  131. dorsal = str(dorsal)
  132. return self.puntos[dorsal]["puntos"]
  133.  
  134. def getInfo(self, dorsal):
  135. dorsal = str(dorsal)
  136. return self.puntos[dorsal]
  137.  
  138. def save(self, nf):
  139. f = open(nf, "w");
  140. json.dump(self.puntos, f)
  141. f.close()
  142.  
  143. @staticmethod
  144. def load(nf):
  145. toret = PuntosPartido()
  146. f = open(nf, "r");
  147. info = json.load(f)
  148. f.close()
  149. toret.puntos = info
  150. return toret
  151.  
  152. # Demo -----------------------------------------------------------------------
  153. class A:
  154. def foo(self):
  155. print("hola")
  156.  
  157. print("collatz(255): " + str(collatz(255)))
  158. invoke(A(), "foo")
  159.  
  160. p = PuntosPartido()
  161. p.inserta(1, "Fernando Martin")
  162. p.inserta(15, "Petrovic")
  163. p.ponCanasta(1)
  164. p.ponCanasta(15)
  165. p.ponFalta(15)
  166. print(p.getInfo(1))
  167. print(p.getInfo(15))
  168. print("Saving as JSON...")
  169. #p.save("partido.json")
  170. #p = None
  171.  
  172. #print("Loading JSON...")
  173. #p = PuntosPartido.load("partido.json")
  174. #print(p.getInfo(1))
  175. #print(p.getInfo(15))
  176.  
Success #stdin #stdout 0.07s 10544KB
stdin
Standard input is empty
stdout
collatz(255): [766, 383, 1150, 575, 1726, 863, 2590, 1295, 3886, 1943, 5830, 2915, 8746, 4373, 13120, 6560, 3280, 1640, 820, 410, 205, 616, 308, 154, 77, 232, 116, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
hola
{'nombre': 'Fernando Martin', 'faltas': 0, 'puntos': 2}
{'nombre': 'Petrovic', 'faltas': 1, 'puntos': 2}
Saving as JSON...