-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncionalidade_plano_telefonico.py
203 lines (164 loc) · 5.62 KB
/
funcionalidade_plano_telefonico.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
class UsuarioTelefone:
"""
Representa um usuário de telefone com nome, número e plano.
"""
PLANOS = ["Plano Essencial Fibra", "Plano Prata Fibra", "Plano Premium Fibra"]
def __init__(self, nome, numero, plano):
"""
Inicializa um novo usuário.
Args:
nome: O nome do usuário.
numero: O número de telefone do usuário.
plano: O plano do usuário.
"""
self.__nome = nome
self.__numero = numero
if plano in self.PLANOS:
self.__plano = plano
else:
raise ValueError("Plano inválido. Os planos disponíveis são: " +
", ".join(self.PLANOS))
def __str__(self):
"""
Retorna uma representação em string do usuário.
"""
return (
f"Usuário {self.__nome} criado com sucesso."
)
# Entrada:
nome = input()
numero = input()
plano = input()
# Crie um novo objeto `UsuarioTelefone` com os dados fornecidos:
usuario = UsuarioTelefone(nome, numero, plano)
print(usuario)
class PlanoTelefone:
"""
Representa um plano de telefone com nome e saldo.
"""
def __init__(self, nome, saldo):
"""
Inicializa um novo plano de telefone.
Args:
nome: O nome do plano.
saldo: O saldo do plano.
"""
self.__nome = nome # Atributo nome encapsulado
self.__saldo = saldo # Atributo saldo encapsulado
def verificar_saldo(self):
"""
Retorna o saldo do plano.
"""
return self.__saldo
def mensagem_personalizada(self):
"""
Retorna uma mensagem personalizada com base no saldo.
"""
if self.__saldo < 10:
return f"Seu saldo está baixo. Recarregue e use os serviços do seu plano."
elif self.__saldo >= 50:
return f"Parabéns! Continue aproveitando seu plano sem preocupações."
else:
return f"Seu saldo está razoável. Aproveite o uso moderado do seu plano."
class UsuarioTelefone:
"""
Representa um usuário de telefone com nome e plano.
"""
def __init__(self, nome, plano):
"""
Inicializa um novo usuário de telefone.
Args:
nome: O nome do usuário.
plano: O plano do usuário (objeto PlanoTelefone).
"""
self.nome = nome
self.plano = plano
def verificar_saldo(self):
"""
Verifica o saldo do usuário e gera uma mensagem personalizada.
"""
saldo = self.plano.verificar_saldo() # Acesando o saldo através do método
mensagem = self.plano.mensagem_personalizada() # Obtendo a mensagem
return saldo, mensagem
# Recebendo as entradas do usuário (nome, plano, saldo):
nome_usuario = input()
nome_plano = input()
saldo_inicial = float(input())
# Criação de objetos do plano de telefone e usuário de telefone com dados fornecidos:
plano_usuario = PlanoTelefone(nome_plano, saldo_inicial)
usuario = UsuarioTelefone(nome_usuario, plano_usuario)
# Chamada do método para verificar_saldo sem acessar diretamente os atributos do plano:
saldo_usuario, mensagem_usuario = usuario.verificar_saldo()
print(mensagem_usuario)
class UsuarioTelefone:
"""
Representa um usuário de telefone com nome, número, plano e saldo.
"""
def __init__(self, nome, numero, plano, saldo_inicial):
"""
Inicializa um novo usuário de telefone.
Args:
nome: O nome do usuário.
numero: O número de telefone do usuário.
plano: O plano do usuário (objeto Plano).
saldo_inicial: O saldo inicial do usuário.
"""
self.__nome = nome
self.__numero = numero
self.plano = plano
self.plano.saldo = saldo_inicial # Define o saldo inicial do plano
def fazer_chamada(self, destinatario, duracao):
"""
Faz uma chamada telefônica para outro usuário.
Args:
destinatario: O número de telefone do destinatário.
duracao: A duração da chamada em minutos.
Returns:
Uma mensagem indicando o sucesso da chamada ou a falta de saldo.
"""
custo_chamada = self.plano.custo_chamada(duracao)
if self.plano.saldo >= custo_chamada:
self.plano.deduzir_saldo(custo_chamada)
return (
f"Chamada para {destinatario} realizada com sucesso. "
f"Saldo: ${self.plano.saldo:.2f}"
)
else:
return "Saldo insuficiente para fazer a chamada."
class Plano:
"""
Representa o plano de um usuário de telefone.
"""
def __init__(self):
"""
Inicializa um novo plano com saldo inicial zero.
"""
self.saldo = 0.0
def custo_chamada(self, duracao):
"""
Calcula o custo de uma chamada.
Args:
duracao: A duração da chamada em minutos.
Returns:
O custo da chamada.
"""
return 0.10 * duracao
def deduzir_saldo(self, valor):
"""
Deduz um valor do saldo do plano.
Args:
valor: O valor a ser deduzido.
"""
self.saldo -= valor
# Entradas do usuário
nome = input()
numero = input()
saldo_inicial = float(input())
destinatario = input()
duracao = int(input())
# Criação dos objetos Plano e UsuarioTelefone
plano_usuario = Plano() # Cria um objeto Plano
usuario = UsuarioTelefone(nome, numero, plano_usuario, saldo_inicial) # Cria o usuário
# Realiza a chamada
mensagem = usuario.fazer_chamada(destinatario, duracao)
print(mensagem)