Descobrir número que falta em lista de 1000 números sequenciais em Python
Descobrir número que falta em lista de 1000 números sequenciais em Python
Neste tutorial vamos escrever um pequeno programa em linguagem Python que irá gerar uma lista com os números de 1 até 1000 (sequenciais), colocados depois em ordem aleatória, e então retirar um único número dessa lista, de forma aleatória também (não sabemos qual será o número retirado).
Na sequência, o programa executará uma função que varre essa lista e descobre qual o número que está faltando, informando-o ao usuário.
Qual o nosso objetivo com esse script? Estudar e praticar técnicas de programação. No caso iremos trabalhar com geração de números aleatórios, embaralhamento de listas, definição de funções e aplicação de lógica para resolver problemas.
Abaixo temos o código usado, e na sequência a explicação detalhada de seu funcionamento. Fique à vontade para alterar o código a seu gosto, modificando ou acrescentando funcionalidades ao script.
Código em Python
import random # Função para encontrar o número que está faltando def encontrar_numero_faltando(lista): # A soma esperada dos números de 1 a 1000 soma_esperada = sum(range(1, 1001)) # A soma dos números na lista com um número faltando soma_lista = sum(lista) # O número que está faltando será a diferença entre a soma esperada e a soma da lista return soma_esperada - soma_lista # Gerar uma lista de 1 a 1000 lista_numeros = list(range(1, 1001)) # Embaralhar a lista de forma aleatória random.shuffle(lista_numeros) # Remove um número aleatório da lista numero_removido = random.choice(lista_numeros) lista_numeros.remove(numero_removido) # Mostrar a lista print(f'Lista de números: \n{lista_numeros}') # Encontrar o número faltando e exibir para o usuário numero_faltando = encontrar_numero_faltando(lista_numeros) print(f'\nO número faltando é: {numero_faltando}')
Como funciona esse script
Inicialmente, importamos o módulo random, que será necessário para a geração e manipulação dos números aleatórios (na verdade, pseudoaleatórios) que necessitaremos.
Na sequência, definimos a função “encontrar_numero_faltando“, que recebe como argumento a lista de números que será analisada.
Para determinar o número que está ausente nesta lista (haverá apenas um único número ausente dentre os mil valores), podemos aplicar várias técnicas. Aqui, iremos calcular a soma dos números de 1 até 1000 (armazenada na variável soma_esperada), e na sequência somaremos todos os números da lista passada à função, armazenado esse valor na variável soma_lista.
Então, basta subtrair da soma_esperada o valor de soma_lista, e o resultado será o número que falta (ausente). A função então retorna esse valor.
Fora da função, geramos uma lista de 1 até 1000 usando a função list() combinada com a função range, embaralhamos os números com o método random.shuffle, e retiramos um número da lista com os métodos random.choice (escolhe o número) e lista_numeros.remove (remove esse número da lista).
Na sequência, exibimos a lista na tela com a função print, e finalmente encontramos o número faltante chamando a função criada encontrar_numero_faltando, exibindo no final seu valor para o usuário.
Note que cada vez que o script for executado, um número diferente será sacado da lista, pois a escolha do valor a ser retirado pelo método choice é aleatória.
Conclusão
Com este pequeno script pudemos treinar o emprego e manipulação de números aleatórios, além da criação de funções e da aplicação de raciocínio lógico para a resolução de problemas com programação.
Você pode alterar o algoritmo para, por exemplo, gerar mais de 1000 números (que tal 1 milhão de valores?) e rodá-lo para testar sua performance e verificar sua utilidade. Será que ele ainda roda de forma satisfatória?
Você também pode tentar portar esse script para outras linguagens de programação que prefira, como por exemplo JavaScript, C# ou Rust, para treinar abordagens ligeiramente diferentes de codificação.
Escreva um comentário