Commits

Danilo Cabello committed c52747f

Adição do código gerado no #2 Coding Dojo

Comments (0)

Files changed (2)

2010_08_25_livraria_potter/harry.py

+CUSTO_UNITARIO = 42
+DESCONTO = [ 1, 
+             1,
+             1-0.05,
+             1-0.07,
+             1-0.09,
+             1-0.11 ]
+
+def livraria(lista_livros):
+    livros = [int(i) for i in lista_livros.split() if int(i) != 0]   #listas compreensivas
+    
+    qtde_minima = min(livros) if livros else 0    
+    qtde_titulos = len(livros)
+    
+    if qtde_titulos > 1:
+        # soma o desconto dos grupos
+        preco = qtde_minima * CUSTO_UNITARIO * DESCONTO[qtde_titulos] * qtde_titulos
+        
+        # soma livros restantes(sobras)
+        preco += (max(livros) - qtde_minima) * CUSTO_UNITARIO
+    else:
+        preco = CUSTO_UNITARIO * sum(livros)
+    
+    return preco

2010_08_25_livraria_potter/harry_test.py

+import unittest
+
+from harry import livraria, CUSTO_UNITARIO, DESCONTO
+
+class HarryTestCase(unittest.TestCase):
+    def test_nenhuma_compra_nao_pago_nada(self):
+        self.assertEquals(livraria("0 0 0 0 0 0 0"), 0.00)
+        
+    def test_um_titulo_qualquer_custa_CUSTO(self):
+        self.assertEquals(livraria("1 0 0 0 0 0 0"), CUSTO_UNITARIO)
+    
+    def test_n_titulos_iguais_dah_n_vezes_CUSTO(self):
+        self.assertEquals(livraria("5 0 0 0 0 0 0"), 5*CUSTO_UNITARIO)
+        
+    def test_2_titulos_diferentes_dah_desconto_aos_pares(self):
+        self.assertEquals(livraria("1 1 0 0 0 0 0"), CUSTO_UNITARIO*DESCONTO[2]*2)
+        self.assertEquals(livraria("2 1 0 0 0 0 0"), CUSTO_UNITARIO*DESCONTO[2]*2+CUSTO_UNITARIO)
+        self.assertEquals(livraria("2 2 0 0 0 0 0"), CUSTO_UNITARIO*DESCONTO[2]*4)
+        self.assertEquals(livraria("0 5 0 0 3 0 0"), CUSTO_UNITARIO*DESCONTO[2]*6 + 2*CUSTO_UNITARIO)
+    
+    def test_3_titulos_diferentes_dah_desconto_aos_trios(self):
+        self.assertEquals(livraria("1 1 1 0 0 0 0"), CUSTO_UNITARIO*DESCONTO[3]*3)
+        self.assertEquals(livraria("2 1 1 0 0 0 0"), CUSTO_UNITARIO*DESCONTO[3]*3 + CUSTO_UNITARIO)
+    
+        
+if __name__ == "__main__":
+    unittest.main()