1
resposta

Mão na massa: refatorando uma função - minha resolução

import os

class Pessoa: pessoas = []

def __init__(self, nome='', idade=int, profissao=''):
    self.nome = nome
    self.idade = idade
    self.profissao = profissao

def __str__(self):
    return f'{self.nome} | {self.idade} | {self.profissao}'

def cadastrar_pessoa():
    os.system('cls')
    pessoa = Pessoa()
    pessoa.nome = input('Ditite o nome da pessoa: ')
    pessoa.idade = int(input('Digite a idade da pessoa: '))
    pessoa.profissao = input('Digite a profissão da pessoa (médico ou professor): ')
    Pessoa.pessoas.append(pessoa)
    print(pessoa)
    print(f'{pessoa.saudacao}')

@classmethod
def adicionar_cadastro(cls):
    novo_cadastro = input(f'Deseja cadastrar uma nova pessoa (s/n): ')
    try:
        if novo_cadastro == 's':
            cls.cadastrar_pessoa()
        elif novo_cadastro == 'n':
            print(f'Cadastro encerrado')
    except:
        print(f'Resposta inválida')

@classmethod
def fez_aniversario (cls):
    pessoa_compara = input(f'Digite o nome do aniversariante: ')
    for pessoa in cls.pessoas:
        if pessoa.nome == pessoa_compara:
            print(f'{pessoa.nome} tem {pessoa.idade}')
            aniv = input(f'{pessoa.nome} fez aniversário ?: ')
            if aniv == 's':
                Pessoa.aniversario(pessoa)
                print(f'{pessoa.nome} tem {pessoa.idade} agora')
                exit()
            else:
                print(f'{pessoa.nome} continua com a mesma idade')
                exit()
        else:
            if pessoa_compara in Pessoa.pessoas:
                exit()
            else:
                print(f'A pessoa {pessoa_compara} não está cadastrada ')

def aniversario(self):
    self.idade += 1
    
@property
def saudacao(self):
    return f'Bom dia doutor' if self.profissao == 'médico' else 'Bom dia professor'
    

Pessoa.cadastrar_pessoa() Pessoa.adicionar_cadastro() Pessoa.fez_aniversario()

1 resposta

Olá, Eduardo. Tudo bem?

Obrigado por compartilhar seu código aqui com a gente.

Ótimo como você implementou o método saudacao utilizando a propriedade @property. Isso torna a leitura do código mais limpa e ajuda a encapsular a lógica específica da saudação baseada na profissão. A organização das funções dentro da classe também demonstra uma boa estruturação de responsabilidades.

Uma dica que pode ajudar é utilizar a função lower() no input das respostas para torná-las case-insensitive, evitando problemas como s ser tratado diferente de S. Veja este exemplo:


novo_cadastro = input('Deseja cadastrar uma nova pessoa (s/n): ').lower()
if novo_cadastro == 's':
    cls.cadastrar_pessoa()
elif novo_cadastro == 'n':
    print('Cadastro encerrado')

O que foi adicionado: O método lower() converte a entrada para minúsculas, garantindo que tanto s quanto S sejam aceitos como uma resposta válida.

Conte com o apoio do Fórum. Abraços e bons estudos!