1
resposta

[Solução] Conversor de tipos

Fiz duas funções diferentes, uma que retorna uma nova lista com os valores convertidos para inteiro (por valor) e uma que converte e altera os valores direto na lista dada como argumento (por referência).

def listint_por_valor(lista_str: list[str]) -> list[int]:
    """
    Converte todos os elementos de uma lista de strings em inteiros,
    retornando uma nova lista com os valores convertidos.

    Args:
        lista_str: A lista de strings a ser convertida.

    Returns:
        Uma nova lista de inteiros.

    Raises:
        ValueError: Se algum elemento da lista não puder ser convertido
            para inteiro.
    """

    return [int(elemento) for elemento in lista_str]

def listint_por_referencia(lista_str: list[str]) -> None:
    """
    Converte todos os elementos de uma lista de strings em inteiros,
    modificando a lista original in-place (no local).

    Args:
        lista_str: A lista de strings a ser modificada. Após a execução,
            os elementos desta lista serão inteiros.

    Raises:
        ValueError: Se algum elemento da lista não puder ser convertido
            para inteiro.
    """

    for i, elemento in enumerate(lista_str):
        lista_str[i] = int(elemento)
        
def ehlistint(lista) -> bool:
    """
    Verifica se todos os elementos em uma lista são do tipo inteiro (int).

    Args:
        lista: A lista a ser verificada. Pode conter elementos de qualquer tipo.

    Returns:
        True se todos os elementos forem inteiros, False caso contrário.
    """

    for elemento in lista:
        if not isinstance(elemento, int):
            return False
    
    return True

def main() -> None:
    separador: str = '\n------------------------------\n'

    # Nesse exemplo utilizamos "listint_por_valor" para converter os itens da lista e retornar uma
    # nova lista com os valores convertidos
    telefones_str: list[str] = ["11987654321", "21912345678", "31987654321", "11911223344"] 
    telefones_int: list[int] = []

    try:
        telefones_int = listint_por_valor(telefones_str)
    except ValueError:
        print('Erro ao converter elemento da lista para [int]')
        exit(1)
    
    print(f'telefones_str = {telefones_str}')
    print(f'telefones_int = {telefones_int}')
    if ehlistint(telefones_int):
        print('Resultado: Todos os números foram convertidos corretamente')
    else:
        print('Resultado: Houve um erro durante a conversão dos números')

    print(separador)

    # Nesse outro exemplo utilizamos "listint_por_referencia" para converter os itens da lista diretamente
    # na lista que foi indicada como argumento na função
    telefones_str: list[str|int] = ["11987654321", "21912345678", "31987654321", "11911223344"] 
    telefones_int: list[int] = []

    try:
        listint_por_referencia(telefones_str)
    except ValueError:
        print('Erro ao converter elemento da lista para [int]')
        exit(1)
    
    print(f'telefones_str = {telefones_str}')
    print(f'telefones_int = {telefones_int}')
    if ehlistint(telefones_str):
        print('Resultado: Todos os números foram convertidos corretamente')
    else:
        print('Resultado: Houve um erro durante a conversão dos números')


if __name__ == '__main__':
    main()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Mozert, como vai?

Seu código está muito bem escrito e reflete um entendimento sólido sobre como manipular tipos de dados em Python, além de demonstrar conhecimento sobre os conceitos de passagem de argumentos por valor e por referência e a utilização de type hints.

Seu uso dos blocos try...except ValueError para lidar com possíveis erros de conversão e a estruturação da função main para testar os dois cenários são excelentes práticas.

Continue compartilhando seus exercícios e descobertas conosco no fórum, estamos à disposição para qualquer outra dúvida ou tópico de aprofundamento.

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