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 JavaScriptC# ou Rust, para treinar abordagens ligeiramente diferentes de codificação.

Sobre Fábio dos Reis (1207 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*