class Cliente:
def __init__(self, n, e):
self.nome = n
self.endereco = e
def __str__(self): return "{}, {}".format(self.nome,
self.endereco)
class PFisica(Cliente):
def __init__(self, n, e, c):
super().__init__(n,e)
self.__cpf = c
def __str__(self):
r = super().__str__()
return "{}, {}".format(r, self.__cpf)
class PJuridica(Cliente):
def __init__(self, n, e, c):
super().__init__(n,e)
self.__cnpj = c
def __str__(self):
r = super().__str__()
return "{}, {}".format(r, self.__cnpj)
class Conta:
def __init__(self, c, l, s):
self.cliente = c
self.login = l
self.__senha = s
def login(self, senha):
return self.__senha == senha
class Carrinho:
def __init__(self, c):
self.data = '16/09/2019'
self.produtos = []
self.conta = c
def __str__(self):
r = ''
for e in self.produtos:
r += str(e) + '\n'
return r
def listarProdutos(self):
return self.produtos
class Produto:
def __init__(self, n, v):
self.nome = n
self.preco = v
def __str__(self): return "{},{}".format(self.nome,
self.preco)
class Backup:
def __init__(self, a):
self.arqBkp = a
def salvarArq(self):
print("Salvar Arq Backup!")
class CarrinhoBkp(Carrinho, Backup):
def __init__(self, c, a):
Backup.__init__(self, a)
Carrinho.__init__(self, c)
self.DataBeckup = '16/09/2019'
def salvarArq(self):
print("Salvar Arq CarrinhoBkp!")
#Item 1
print("Item 1")
cPF1 = PFisica('A','Rua...','000000')
cPJ1 = PJuridica('A','Rua...', '11111')
conta1 = Conta(cPF1, 'l1','s1')
conta2 = Conta(cPJ1, 'l2','s2')
c1 = Carrinho(conta1)
c2 = Carrinho(conta2)
p1 = Produto('P1',10)
p2 = Produto('P2',15)
p3 = Produto('P3',1)
c1.produtos.append(p1)
c1.produtos.append(p2)
c1.produtos.append(p3)
c2.produtos.append(p1)
c2.produtos.append(p2)
c2.produtos.append(p3)
for e1 in [c1,c2]:
p = e1.listarProdutos()
for e2 in p :
print(e2)
#Item2
print("\nItem 2")
cbkp1 = CarrinhoBkp(conta1, 'arq.bkp')
cbkp1.produtos.append(p2)
cbkp1.produtos.append(p3)
print(cbkp1.conta.cliente.nome)
print(cbkp1.conta.cliente.endereco)
cbkp1.salvarArq()
# your code goes here
Y2xhc3MgQ2xpZW50ZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBlKToKICAgICAgICBzZWxmLm5vbWUgPSBuCiAgICAgICAgc2VsZi5lbmRlcmVjbyA9IGUKCiAgICBkZWYgX19zdHJfXyhzZWxmKTogcmV0dXJuICJ7fSwge30iLmZvcm1hdChzZWxmLm5vbWUsCiAgICBzZWxmLmVuZGVyZWNvKQoKY2xhc3MgUEZpc2ljYShDbGllbnRlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBlLCBjKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG4sZSkKICAgICAgICBzZWxmLl9fY3BmID0gYwoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHIgPSBzdXBlcigpLl9fc3RyX18oKQogICAgICAgIHJldHVybiAie30sIHt9Ii5mb3JtYXQociwgc2VsZi5fX2NwZikKCmNsYXNzIFBKdXJpZGljYShDbGllbnRlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBlLCBjKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG4sZSkKICAgICAgICBzZWxmLl9fY25waiA9IGMKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByID0gc3VwZXIoKS5fX3N0cl9fKCkKICAgICAgICByZXR1cm4gInt9LCB7fSIuZm9ybWF0KHIsIHNlbGYuX19jbnBqKQoKY2xhc3MgQ29udGE6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGMsIGwsIHMpOgogICAgICAgIHNlbGYuY2xpZW50ZSA9IGMKICAgICAgICBzZWxmLmxvZ2luID0gbAogICAgICAgIHNlbGYuX19zZW5oYSA9IHMKCiAgICBkZWYgbG9naW4oc2VsZiwgc2VuaGEpOgogICAgICAgIHJldHVybiBzZWxmLl9fc2VuaGEgPT0gc2VuaGEKCmNsYXNzIENhcnJpbmhvOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjKToKICAgICAgICBzZWxmLmRhdGEgPSAnMTYvMDkvMjAxOScKICAgICAgICBzZWxmLnByb2R1dG9zID0gW10KICAgICAgICBzZWxmLmNvbnRhID0gYwoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHIgPSAnJwogICAgICAgIGZvciBlIGluIHNlbGYucHJvZHV0b3M6CiAgICAgICAgICAgIHIgKz0gc3RyKGUpICsgJ1xuJwogICAgICAgIHJldHVybiByCgogICAgZGVmIGxpc3RhclByb2R1dG9zKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnByb2R1dG9zCgpjbGFzcyBQcm9kdXRvOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCB2KToKICAgICAgICBzZWxmLm5vbWUgPSBuCiAgICAgICAgc2VsZi5wcmVjbyA9IHYKCiAgICBkZWYgX19zdHJfXyhzZWxmKTogcmV0dXJuICJ7fSx7fSIuZm9ybWF0KHNlbGYubm9tZSwKICAgIHNlbGYucHJlY28pCgpjbGFzcyBCYWNrdXA6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGEpOgogICAgICAgIHNlbGYuYXJxQmtwID0gYQoKICAgIGRlZiBzYWx2YXJBcnEoc2VsZik6CiAgICAgICAgcHJpbnQoIlNhbHZhciBBcnEgQmFja3VwISIpCgpjbGFzcyBDYXJyaW5ob0JrcChDYXJyaW5obywgQmFja3VwKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYywgYSk6CiAgICAgICAgQmFja3VwLl9faW5pdF9fKHNlbGYsIGEpCiAgICAgICAgQ2FycmluaG8uX19pbml0X18oc2VsZiwgYykKICAgICAgICBzZWxmLkRhdGFCZWNrdXAgID0gJzE2LzA5LzIwMTknCgogICAgZGVmIHNhbHZhckFycShzZWxmKToKICAgICAgICBwcmludCgiU2FsdmFyIEFycSBDYXJyaW5ob0JrcCEiKQoKI0l0ZW0gMQpwcmludCgiSXRlbSAxIikKY1BGMSA9IFBGaXNpY2EoJ0EnLCdSdWEuLi4nLCcwMDAwMDAnKQpjUEoxID0gUEp1cmlkaWNhKCdBJywnUnVhLi4uJywgJzExMTExJykKCmNvbnRhMSA9IENvbnRhKGNQRjEsICdsMScsJ3MxJykKY29udGEyID0gQ29udGEoY1BKMSwgJ2wyJywnczInKQoKYzEgPSBDYXJyaW5obyhjb250YTEpCmMyID0gQ2FycmluaG8oY29udGEyKQoKcDEgPSBQcm9kdXRvKCdQMScsMTApCnAyID0gUHJvZHV0bygnUDInLDE1KQpwMyA9IFByb2R1dG8oJ1AzJywxKQoKYzEucHJvZHV0b3MuYXBwZW5kKHAxKQpjMS5wcm9kdXRvcy5hcHBlbmQocDIpCmMxLnByb2R1dG9zLmFwcGVuZChwMykKCmMyLnByb2R1dG9zLmFwcGVuZChwMSkKYzIucHJvZHV0b3MuYXBwZW5kKHAyKQpjMi5wcm9kdXRvcy5hcHBlbmQocDMpCgpmb3IgZTEgaW4gW2MxLGMyXToKICAgIHAgPSBlMS5saXN0YXJQcm9kdXRvcygpCiAgICBmb3IgZTIgaW4gcCA6CiAgICAgICAgcHJpbnQoZTIpCgojSXRlbTIKcHJpbnQoIlxuSXRlbSAyIikKY2JrcDEgPSBDYXJyaW5ob0JrcChjb250YTEsICdhcnEuYmtwJykKY2JrcDEucHJvZHV0b3MuYXBwZW5kKHAyKQpjYmtwMS5wcm9kdXRvcy5hcHBlbmQocDMpCgpwcmludChjYmtwMS5jb250YS5jbGllbnRlLm5vbWUpCnByaW50KGNia3AxLmNvbnRhLmNsaWVudGUuZW5kZXJlY28pCmNia3AxLnNhbHZhckFycSgpCiMgeW91ciBjb2RlIGdvZXMgaGVyZQ==