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

[Dúvida] duvida sobre o 'not'

Verfique na resolução do instrutor e fique com uma duvida nessa parte:

def verifica_tipos(lista):  

   for num in lista:  

       if not isinstance(num, int):  

           return "Erro na conversão."  

   return "Todos os números foram convertidos corretamente!" 

na condiciional 'if' ele vem seguinda de um 'not', mas fiz una testea no vs code, retirei o not e troquei a mensagens de saida( return "Erro na conversão." vira return "Todos os números foram convertidos corretamente!" e vise versa ), exemplo:


   for num in lista:  

       if isinstance(num, int):  

           return "Todos os números foram convertidos corretamente!" 

   return "Erro na conversão."  

O que me deixou em duvida é se o 'not' é uma questão pessoal de quem está resolvendo ou se tem um motivo, o qual não estou enxengando, pq na prática o resultado foi o mesmo, nas observações que fiz

2 respostas
solução!

Olá, Gabriel, como vai?

O uso do operador not no exemplo do instrutor serve para identificar o primeiro elemento que não seja um inteiro e interromper a função imediatamente com uma mensagem de erro. Se você remover o not e inverter as mensagens, a lógica muda porque a função passará a retornar uma confirmação de sucesso assim que encontrar o primeiro número inteiro, sem verificar se os elementos restantes da lista também são válidos.

Em programação, o not é frequentemente utilizado para realizar validações negativas, permitindo que o código pare o processamento assim que algo estiver fora do esperado.

Por exemplo, fiz uma pequena adaptação no código do projeto removendo o conversor e mantendo uma lista com dois numeros inteiros e duas strings:

def verifica_tipos(lista):  
   for num in lista:  
       if isinstance(num, int):  
           return "Todos os números foram convertidos corretamente!" 

   return "Erro."  

telefones = [11987654321, 21912345678, "31987654321", "11911223344"] 
print(verifica_tipos(telefones)) 

Nesse caso, a função verifica_tipos vai percorrer a lista e retornar a mensagem de sucesso porque o primeiro elemento já é um valor inteiro, mas isso não significa que todos os elementos foram validados. A execução do return dentro do for faz com que a função seja encerrada imediatamente, então os demais itens da lista nem chegam a ser analisados.

Já na versão com not, o comportamento é o inverso. A função continua percorrendo a lista normalmente e só interrompe caso encontre algum valor que não seja inteiro.

def verifica_tipos(lista):  
   for num in lista:  
       if not isinstance(num, int):  
           return "Erro."  

   return "Todos os números foram convertidos corretamente!" 

telefones = [11987654321, 21912345678, "31987654321", "11911223344"] 
print(verifica_tipos(telefones)) 

Ao chegar no terceiro elemento, que é uma string, a condição if not isinstance(num, int) será verdadeira e a função retornará a mensagem de erro. Dessa forma, o resultado reflete corretamente o estado real dos dados.

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Agradeço a respota, agora sim ficou claro o pq do not, muito obrigado!