3
respostas

Convertendo string em int

def converter_string(lista):
    return [int(telefone) for telefone in lista]

def verificar_int(lista):
    for num in lista:
        if not isinstance(num,int):
            return "Erro de conversão"
    return "todos os valores foram convertidos para inteiro"


telefones = ["11987654321", "21912345678", "31987654321", "11911223344"] 

telefones_convertidos = converter_string(telefones)
print(verificar_int(telefones_convertidos))
print(converter_string(telefones))
3 respostas

Olá, Gabriel! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de funções para modularizar o processo de conversão, utilizou muito bem a compreensão de listas para transformar strings em inteiros e ainda compreendeu a importância da verificação de tipo para garantir a integridade dos dados convertidos.

Uma dica interessante para o futuro é adicionar um tratamento de exceção para lidar com entradas inválidas. Assim:

def converter_string(lista):
    try:
        return [int(telefone) for telefone in lista]
    except ValueError:
        return "Erro: lista contém valores não numéricos."

Isso faz com que o código fique mais robusto e evite falhas inesperadas durante a execução.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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

Vejo que exercício proposto poderia ter melhorias

  1. Eu notei que usar o try except é uma boa pratica para evitar a quebra do programa com o ValueError, mas que no final achei o exercício mal feito, pois pede duas funções diferente uma para retornar a lista de números e outra para validar os numeros:
  • Se fizermos como a resposta proposta faz sentindo as duas funções, pois apesar da resposta do exercício não estar errada, ela não é funcional, pois se houver valores que não são int, já retornará o ValueError na execução do programamas corre o risco do programa quebrar com ValueError,
  • Se fizermos uma verificação anterior como no uso do try except na função de conversão , a outra função que valida se é int perde o sentido, pois supostamente só seria convertido se fossem números inteiros.
  • Não gosto de não haver tentativa de erro no exercício. É muito simples falar que está certo sem testar o erro e realmente ver que deu certo. Por isso sugiro a melhoria na extrutura do exercicio e nas explicações da correção, para que os alunos entendam os caminhos mais comuns possíveis.
  1. Por fim, a sua resposta anterior, Daniel Nogueira, é uma boa pratica, porém quando eu estava estudando percebi que no final não é melhor solução pois os retornos estão inconsistente. A mesma função retorna uma lista de int ou uma string informando o erro. Por isso, com ajuda do chat GPT, ele me explicou que o melhor retorno seria None para manter a consistência, você concorda?

def convert_string_to_integers(phone_list: list):
    try:
        return [int(phone) for phone in phone_list]
    except ValueError:
        # Using `None` in the except block ensures a consistent return type.
        # instead of mixing types (like returning a string), which helps maintain predictable behavior.
        return None


def is_type_int(converted_list: list):
    if not converted_list:
        return False
    for phone in converted_list:
        if not isinstance(phone, int):
            return False
        return True


def formated_response(phones: list):
    converted_phone_list = convert_string_to_integers(phones)
    is_int = is_type_int(converted_phone_list)
    if is_int:
        return "All numbers were conveted correctly!"

    return "Error: list were not converted correctly, because there were not only integer values."



phones = ["11987654321", "21912345678", "31987654321", "11911223344"]
phones2 = ["abc222999", "21912345678", "31987654321", "11911223344"]

print(formated_response(phones))
print(formated_response(phones2))

Olá, Thaís! Como vai?

Você trouxe ótimas observações!

E sim, a sua abordagem também seria uma possibilidade muito boa.

Abraço e bons estudos!