Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Praticando Python | 022 | Código | Faça como eu fiz: contador de caracteres

Boa tarde, apenas para compartilhar conforme orientado no curso.

usei nesse exercicio alguns casos que imaginei que poderiam quebrar o codigo de alguma forma, por erro de digitação ou até mesmo de proposito para testar os if's do codigo.
estou tentando explorar ao maximo cada detalhe.

# Praticando Python | 022 | Código | Faça como eu fiz: contador de caracteres

# Sara está participando de um concurso de escrita, e uma das regras exige que cada palavra de seu texto tenha um limite máximo de caracteres.
# Ajude Sara criando uma função que receba uma palavra e exiba a quantidade de caracteres.

'''Função | Ler Palavra com limite mínimo e máximo de caracteres'''
def ler_palavra(msg: str, min_len: int = 1, max_len: int = 46) -> str:

    # laço infinito (repetir até estar correto) | ele encerra no return.
    while True:
        # .strip() remove espaços extras
        p = input(msg).strip()

        # Verifica se a palavra está preenchida com vazio 
        if not p:
            print("Erro: digite uma palavra.")
            continue

        # Verifica se há espaço dentro da palavra, exemplo: "Osasco SP"
        if " " in p:
            print("Erro: digite apenas uma palavra, sem espaços.")
            continue

        # Mínimo de caracteres | A menor palavra do português é o artigo “a”, com apenas 1 caractere.
        if len(p) < min_len:
            print(f"Erro: a palavra deve ter pelo menos {min_len} caracteres.")

        # Máximo de caracteres | “pneumoultramicroscopicossilicovulcanoconiótico” - possui 46 caracteres.
        if len(p) > max_len:
            print(f"Erro: a palavra não pode ter mais que {max_len} caracteres. "
                  f"Você digitou {len(p)}.")
            continue

        # Permitir hífen ou apóstrofo em nomes, exemplo Ana-Julia ou d'Jalma 
        permitido = p.replace("-", "").replace("'", "")
        if not permitido.isalpha():
            print("Erro: use apenas letras, se precisar pode usar o hífen (-) ou apóstrofo (').")
            continue

        # Se tudo estiver correto, encera a função e retornar a palavra.
        return p
        
# Chamar a função
palavra = ler_palavra("Digite a palavra desejada: ", min_len=1, max_len=46)
print(f"A palavra '{palavra}' possui {len(palavra)} caracteres.")
2 respostas
solução!

Olá, estudante, como vai?

Obrigado por compartilhar sua solução no fórum. O exercício está bem completo e demonstra uma preocupação clara com validação de entrada e com cenários que normalmente passam despercebidos, o que é muito positivo para quem está praticando funções e controle de fluxo em Python.

A lógica geral da função está correta e atende ao objetivo proposto. Você utilizou bem o laço, as validações com if e o retorno da função para encerrar o processo apenas quando a entrada é válida, o que está alinhado com boas práticas para esse tipo de exercício

Há apenas um pequeno ponto de ajuste no código. Na validação do tamanho mínimo da palavra, quando len(p) < min_len, a mensagem de erro é exibida, mas o laço não é interrompido. Sem um continue nesse bloco, o código segue para as próximas validações e pode acabar retornando uma palavra que não atende ao tamanho mínimo. Inserir um continue após esse print mantém o comportamento consistente com as demais validações.

Parabéns pela iniciativa de explorar casos de erro e por ir além do pedido. Continue compartilhando suas soluções e dúvidas por aqui, o fórum fica à disposição para acompanhar sua evolução.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

muito obrigado.