-
Notifications
You must be signed in to change notification settings - Fork 1
/
calcular_desconto_vendas_livro.py
86 lines (64 loc) · 2.34 KB
/
calcular_desconto_vendas_livro.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
01/13/2023
Fonte: https://dojopuzzles.com/problems/livraria-do-harry-potter/
Desafio:
Uma livraria contém 7 títulos distintos e possui um esquema de descontos que leva em consideração se é o mesmo título ou não. O problema consiste em calcular o melhor desconto para o cliente.
Preço de um título qualquer: R$ 42,00
Descontos:
2 livros - 5%
3 livros - 10%
4 livros - 15%
5 livros - 20%
Quanto custa?
2 cópias do primeiro livro (A)
2 cópias do segundo livro (B)
2 cópias do terceiro livro (C)
1 cópia do quarto livro (D)
1 cópia do quinto livro (E)
Resposta: R$ 281,40
Note que o preço deve ser o menor valor obtido combinando os livros.
"""
'''
Participantes
Greg
João Moreno
Cássio Augusto
Everton Matos
Vitor Pestana
Marcio Conrado
'''
import pytest
def calcula_desconto(*vendas):
quantidade_livros = 0
valor_livro = 42
desconto = 0
for quantidade, livro in vendas:
quantidade_livros += quantidade
if quantidade_livros == 2:
desconto = 5
elif quantidade_livros == 3:
desconto = 10
elif quantidade_livros == 4:
desconto = 15
elif quantidade_livros >= 5:
desconto = 20
valor_com_desconto = valor_livro * quantidade_livros * (100 - desconto) / 100
return '{:.2f}'.format(valor_com_desconto)
def test_calcula_desconto():
assert calcula_desconto((2, 'A'), (2, 'B'), (2, 'C'), (1, 'D'),
(1, 'E')) == "268.80"
assert calcula_desconto((3, 'A'), (2, 'B'), (3, 'C'), (2, 'D'),
(1, 'E')) == "369.60"
def test_calcula_conjunto_unico():
assert calcula_desconto((1, 'A')) == "42.00"
assert calcula_desconto((1, 'A'), (1, 'B')) == "79.80"
assert calcula_desconto((1, 'A'), (1, 'B'), (1, 'C')) == "113.40"
assert calcula_desconto((1, 'A'), (1, 'B'), (1, 'C'), (1, 'D')) == "142.80"
assert calcula_desconto((1, 'A'), (1, 'B'), (1, 'C'), (1, 'D'),
(1, 'E')) == "168.00"
assert calcula_desconto((1, 'A'), (1, 'B'), (1, 'C'), (1, 'D'), (1, 'E'),
(1, 'F')) == "201.60"
assert calcula_desconto((1, 'A'), (1, 'B'), (1, 'C'), (1, 'D'), (1, 'E'),
(1, 'F'), (1, 'G')) == "235.20"
if __name__ == "__main__":
pytest.main(["-s", __file__])