Você está aqui: Python ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca |
Como percorrer uma árvore binária em Python usando o algorítmo depth-first search (DFS) de forma iterativaQuantidade de visualizações: 187 vezes |
Nesta dica mostrarei como podemos implementar o algorítmo da Busca em Profundidade (DFS, do inglês depth-first search) em Python de forma iterativa, ou seja, sem usar recursividade. Não farei a busca, mas sim o percurso, para que você entenda como a lógica dessa busca funciona. Antes de iniciarmos, veja a árvore binária que vamos usar no exemplo: ![]() Note que esta árvore possui seis nós. O nó 5 é o nó raiz, e possui como filhos os nós 4 e 9. O nó 4, por sua vez, possui apenas um filho, o nó 2, ou seja, o filho da esquerda. O nó 9 possui dois filhos: o nó 3 é o filho da esquerda e o nó 12 é o filho da direita. Os filhos da árvore binária que não possuem outros filhos são chamados de folhas. Com a abordagem da busca em profundidade, começamos com o nó raiz e viajamos para baixo em uma única ramificação. Se o nó desejado for encontrado naquela ramificação, ótimo. Do contrário, continuamos subindo e pesquisando por nós não visitados. Esse tipo de busca também tem uma notação big O de O(n). Vamos à implementação? Veja o código para a classe No, que representa um nó na árvore binária: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # implementação da classe No class No: # construtor da classe def __init__(self, valor): # o valor do nó self.valor = valor # o filho da esquerda self.esquerdo = None # o filho da direita self.direito = None Veja agora o código completo para o exemplo. Note que usei uma implementação não-recursiva, na qual todos os nós expandidos recentemente são adicionados a uma pilha, para realizar a exploração. O uso da pilha permite o retrocesso (backtracking) de forma a reiniciarmos o percurso ou busca no próximo nó. Para manter o código o mais simples possível, eu usei a classe List do Python, juntamente com seus métodos append() e pop() para simular a pilha. Usei também uma List para guardar os valores da árvore binária na ordem depth-first. Eis o código: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # implementação da classe No class No: # construtor da classe def __init__(self, valor): # o valor do nó self.valor = valor # o filho da esquerda self.esquerdo = None # o filho da direita self.direito = None # função principal do programa Python def main(): # vamos criar os nós da árvore cinco = No(5) # será a raiz da árvore quatro = No(4) nove = No(9) dois = No(2) tres = No(3) doze = No(12) # vamos fazer a ligação entre os nós cinco.esquerdo = quatro cinco.direito = nove quatro.esquerdo = dois nove.esquerdo = tres nove.direito = doze # agora já podemos efetuar o percurso depth-first valores = percurso_depth_first(cinco) print("Os valores na ordem Depth-First são: {0}".format(valores)) # função que permite realizar a pesquisa depth-first search (DFS) def percurso_depth_first(no): # vamos usar uma List para retornar os elementos # na ordem Depth-First valores = list() # vamos criar uma nova instância de uma list para representar uma pilha pilha = list() # já vamos adicionar o primeiro nó recebido, que é a raiz pilha.append(no) # enquanto a pilha não estiver vazia while len(pilha) > 0: # vamos obter o elemento no topo da pilha atual = pilha.pop() # adicionamos este valor na List valores.append(atual.valor) # vamos colocar o filho direito na pilha if atual.direito != None: pilha.append(atual.direito) # vamos colocar o filho esquerdo na pilha if atual.esquerdo != None: pilha.append(atual.esquerdo) return valores # retorna os valores da árvore if __name__== "__main__": main() Ao executarmos este código Python nós teremos o seguinte resultado: Os valores na ordem Depth-First são: [5, 4, 2, 9, 3, 12] Compare estes valores com a imagem vista anteriormente para entender ainda melhor o percurso ou busca Depth-First. |
![]() |
Python ::: Dicas & Truques ::: Data e Hora |
Como retornar o dia do mês em Python como um decimal no intervalo 01-31 usando strftime("%d")Quantidade de visualizações: 8090 vezes |
Como retornar o dia do mês em Python como um decimal no intervalo 01-31 usando strftime("%d") Este exemplo mostra como usar a função strftime() e o sinalizador ("%d") para retornar o dia do mês a partir de um datetime. Observe que o dia do mês será retornado como um decimal no intervalo 01-31. ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- from datetime import datetime def main(): # Obtém um datetime da data e hora atual hoje = datetime.today() # Exibe o dia do mês como um decimal print(hoje.strftime("O dia do mês é: %d")) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: O dia do mês é: 26 |
Python ::: Dicas & Truques ::: Lista (List) |
Como adicionar itens ao final de uma lista de inteiros em Python usando a função append()Quantidade de visualizações: 8529 vezes |
O método append() é usado quando queremos adicionar um novo elemento no final de uma list Python. Esta função aceita qualquer tipo de elemento, ou seja, uma string, um number, um object, etc. Veja um exemplo de seu uso no trecho de código a seguir: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- """ Este exemplo mostra como adicionar itens ao fim de uma lista de inteiros. """ def main(): # cria uma lista vazia valores = [] # início do laço for for i in range(1, 6): valor = int(input("Informe um inteiro: ")) # insere o valor no final da lista valores.append(valor) # exibe os valores da lista print("Valores na lista:", valores, "\n") if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: Informe um inteiro: 7 Informe um inteiro: 2 Informe um inteiro: 9 Informe um inteiro: 3 Informe um inteiro: 6 Valores na lista: [7, 2, 9, 3, 6] |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Fenômenos dos Transportes, Hidráulica e Drenagem |
Exercício Resolvido de Python - Como calcular Vazão Volumétrica, Vazão Mássica e Vazão em Peso usando Python - Python para Fenômenos dos Transportes e HidráulicaQuantidade de visualizações: 49 vezes |
Pergunta/Tarefa: Uma torneira enche de água um tanque em 2 horas e 20 segundos. Determine a vazão em volume, em massa e em peso em unidades do SI. Considere que a densidade da água é igual a 1000 kg/m3 e g = 9,8 m/s2. Considere também que a capacidade do tanque é de 10 mil litros. Sua saída deverá ser parecida com: Informe a quantidade de horas: 2 Informe a quantidade de segundos: 20 Informe a capacidade do tanque (litros): 10000 Informe a densidade da água (kg/m3): 1000 Informe a força da gravidade (m/s2): 9.8 Total de segundos: 7220 Capacidade do tanque: 10.0 m3 Vazão Volumétrica: 0.0013850415512465374 m3/s Vazão Mássica: 1.3850415512465375 kg/s Vazão em Peso: 13.57340720221607 N/s Para obter a Vazão Volumétrica, que representa a quantidade de volume que atravessa uma região em um determinado intervalo de tempo, nós vamos usar a seguinte fórmula: \[Q_v = \frac{V}{T} \] Onde: Qv = vazão volumétrica em metros cúbicos por segundo (m3/s); V = o volume do fluido em metros cúbicos (m3); T = o tempo em segundos (s). Para obter a Vazão Mássica, que representa a quantidade de massa que atravessa uma região em um determinado intervalo de tempo, nós vamos usar a seguinte fórmula: \[Q_m = \frac{M}{T} \] Onde: Qm = vazão mássica em quilos por segundo (kg/s); M = a massa do fluido em quilos (kg); T = o tempo em segundos (s). Para a Vazão em Peso nós só precisamos multiplicar a Vazão Mássica pelo peso da gravidade, ou seja, 9.8. Dessa forma, a Vazão em Peso é dada em N/s. Obs.: No código eu mostro como converter horas em segundos e litros em m3. Veja a resolução completa para o exercício em Python, comentada linha a linha: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # método principal def main(): # vamos ler a quantidade de horas e segundos hora = int(input("Informe a quantidade de horas: ")) segundos = int(input("Informe a quantidade de segundos: ")) # agora vamos ler a capacidade do tanque em litros capacidade_tanque = int(input("Informe a capacidade do tanque (litros): ")) # vamos ler a densidade da água densidade_agua = float(input("Informe a densidade da água (kg/m3): ")) # vamos ler a força da gravidade gravidade = float(input("Informe a força da gravidade (m/s2): ")) # vamos calcular o total de segundos segundos_hora = 3600 total_segundos = (2 * segundos_hora) + segundos # vamos converter a capacidade do tanque de litros para m3 volume = capacidade_tanque / 1000.0 # vamos calcular a vazão volumétrica vazao_volumetrica = volume / total_segundos # vamos calcular a vazão mássica vazao_massica = vazao_volumetrica * densidade_agua # vamos calcular a vazão em peso vazao_peso = vazao_massica * gravidade # e mostramos o resultado print("\nTotal de segundos: {0}".format(total_segundos)) print("Capacidade do tanque: {0} m3".format(volume)) print("Vazão Volumétrica: {0} m3/s".format(vazao_volumetrica)) print("Vazão Mássica: {0} kg/s".format(vazao_massica)) print("Vazão em Peso: {0} N/s".format(vazao_peso)) if __name__== "__main__": main() |
Python ::: Pandas Python Library (Biblioteca Python Pandas) ::: Passos Iniciais |
Como usar a biblioteca Pandas do Python em seus projetos de Data Science e Machine LearningQuantidade de visualizações: 3034 vezes |
A biblioteca Pandas foi criada por Wes McKinney em 2008 e, desde então, tem sido adotada em projetos que envolvem Big Data, Data Science, Data Mining, Machine Learning e até mesmo aplicações gerais de Inteligência Artificial (IA). Esta biblioteca nos oferece funções para o trabalho com datasets (conjunto de dados). Tais funções permitem analisar, limpar, explorar e manipular dados. Isso faz todo sentido, visto que o nome Pandas é uma referência à "Panel Data" e "Python Data Analysis". Já tenho o Pandas disponível na minha instalação do Python? Antes de iniciar qualquer projeto que envolva a bilioteca Pandas, é importante verificar se a mesma está disponível em sua instalação do Python. Isso pode ser de várias formas. Mostrarei como obter a lista de módulos usando a opção "list" do pip. Basta abrir uma janela de terminal e disparar o seguinte comando: C:\Users\Osmar>pip list Você terá um resultado parecido com: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- Package Version ----------------- ------- astroid 2.4.2 colorama 0.4.4 isort 5.6.4 lazy-object-proxy 1.4.3 mccabe 0.6.1 numpy 1.19.4 pandas 1.1.5 Pillow 8.0.1 pip 20.2.3 pylint 2.6.0 python-dateutil 2.8.1 pytz 2020.4 setuptools 49.2.1 six 1.15.0 toml 0.10.2 wrapt 1.12.1 wxPython 4.1.1 Uma outra forma é tentando importar o módulo pandas. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # importamos a bibliteca Pandas import pandas as pd def main(): # vamos mostrar a versão da biblioteca Pandas versao = pd.__version__ print("A versão do Pandas é:", versao) if __name__== "__main__": main() Se você tiver o Pandas instalado, o resultado desse código será algo como: A versão do Pandas é: 1.1.5 Se você não tiver a biblioteca Pandas instalada, a seguinte mensagem de erro será exibida: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- Exception has occurred: ModuleNotFoundError No module named 'pandas' File "C:\estudos_python\estudos.py", line 2, in <module> import pandas as pd Não tenho o Pandas ainda. O que faço? Abra uma janela de terminal e dispare o comando abaixo: C:\Users\Osmar>pip install pandas Depois de alguns segundos você verá o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- Collecting pandas Downloading pandas-1.1.5-cp39-cp39-win_amd64.whl (8.9 MB) |-| 8.9 MB 1.7 MB/s Collecting numpy>=1.15.4 Downloading numpy-1.19.4-cp39-cp39-win_amd64.whl (13.0 MB) |-| 13.0 MB 3.3 MB/s Collecting pytz>=2017.2 Downloading pytz-2020.4-py2.py3-none-any.whl (509 kB) |-| 509 kB 6.4 MB/s Collecting python-dateutil>=2.7.3 Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB) |-| 227 kB 3.2 MB/s Requirement already satisfied: six>=1.5 in c:\users\osmar\appdata\roaming\python\python39\site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0) Installing collected packages: numpy, pytz, python-dateutil, pandas Successfully installed numpy-1.19.4 pandas-1.1.5 python-dateutil-2.8.1 pytz-2020.4 WARNING: You are using pip version 20.2.3; however, version 20.3.1 is available. You should consider upgrading via the 'c:\python_3_9_1\python.exe -m pip install --upgrade pip' command. Obteve resultado parecido? Pronto! Você já pode começar a usar a biblioteca Pandas em seus aplicações Python. |
Python ::: Dicas & Truques ::: Lista (List) |
Como ordenar uma lista de inteiros em Python de acordo com a soma dos dígitos de seus elementos usando uma função lambdaQuantidade de visualizações: 791 vezes |
Nesta dica mostrarei como podemos usar uma função lambda em Python para ordenar uma lista de inteiros de acordo com a soma dos seus dígitos. Este é um código muito interessante e que permitirá um melhor entendimento de funções lambda em Python. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # método usado para ordenar a lista de acordo com a soma # de seus dígitos def ordenar(vetor): return sorted(vetor, key=lambda n: sum(int(c) for c in str(n) if c != "-")) # função principal do programa def main(): # vamos criar uma lista de inteiros valores = [21, 10, 8, 32, 70, 41, 40, 11] # vamos exibir a lista original print("Lista na ordem original: {0}".format(valores)) # agora vamos ordenar de acordo com a soma dos dígitos lista_ordenada = ordenar(valores) print("Lista ordenada: {0}".format(lista_ordenada)) if __name__== "__main__": main() Ao executarmos este código Python nós teremos o seguinte resultado: Lista na ordem original: [21, 10, 8, 32, 70, 41, 40, 11] Lista ordenada: [10, 11, 21, 40, 32, 41, 70, 8] |
Python ::: Dicas & Truques ::: Arquivos e Diretórios |
Como usar a função exists() do módulo os.path para testar a existência de um arquivo ou diretório em PythonQuantidade de visualizações: 3160 vezes |
Antes de efetuarmos qualquer ação em um arquivo ou diretório, é sempre uma boa idéia testar primeiro se tal arquivo ou diretório existe no sistema. Isso pode ser feito por meio do método exists() do módulo os.path. Este método retorna True se o arquivo ou diretório existir, e False em caso contrário. Veja um exemplo no qual checamos a existência de um arquivo chamado "teste.txt": ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- from os import path def main(): # vamos verificar se este arquivo existe, neste local if path.exists("C:\\estudos_python\\teste.txt"): print("Arquivo foi encontrado") else: print("Arquivo não foi encontrado") if __name__== "__main__": main() Se o arquivo existir no caminho informado, o texto "Arquivo foi encontrado" será impresso na tela. Se o arquivo não puder ser encontrado, o texto "Arquivo não foi encontrado" será exibido. Veja agora como podemos verificar se um diretório existe ou não no sistema operacional: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- from os import path def main(): # vamos verificar se este diretório existe if path.exists("C:\\estudos_python"): print("Diretório existe.") else: print("Diretório não existe.") if __name__== "__main__": main() Execute este código e veja o resultado. Se o diretório pesquisado existir, o texto "Diretório existe." será exibido. |
Python ::: Matplotlib Python Library (Biblioteca Python Matplotlib) ::: Geração e Plotagem de Gráficos usando Matplotlib |
Como gerar o gráfico da função seno usando a biblioteca Matplotlib do PythonQuantidade de visualizações: 2601 vezes |
Sabemos, como lembrança das nossas aulas de Trigonometria no segundo grau, que a função seno é a razão entre o cateto oposto e a hipotenusa de um triângulo retângulo, ou seja, trata-se de uma razão trigonométrica que retorna valores na faixa de -1 até 1 (ambos inclusos). Nesta dica mostrarei como podemos usar as capacidades de geração de gráficos da biblioteca Matplotlib da linguagem Python, combinadas com as funções arange() e sin() da biblioteca NumPy para gerar o gráfico da função seno. Antes de vermos o código, observe o resultado gerado na imagem a seguir: ![]() Veja agora o código Python completo para a geração do gráfico: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # importamos a biblioteca NumPy import numpy as np #importamos a biblioteca Matplotlib import matplotlib.pyplot as plt def main(): # definimos o título para a área de plotagem plt.title('Gráfico da Função Seno') # vamos exibir o grid da área de plotagem plt.grid(True) # vamos definir os valores da coordenada x # os valores gerados serão de 0 até 12 (não incluído) eixo_x = np.arange(0, 12, 0.1) # os valores da coordenada y serão o seno de # cada valor correspondente no eixo x eixo_y = np.sin(eixo_x) # vamos plotar a função seno agora plt.plot(eixo_x, eixo_y) # finalmente exibimos o resultado plt.show() if __name__== "__main__": main() |
Python ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Apostila Python para iniciantes - Como exibir os números pares de 0 a 20 usando o laço for da linguagem PythonQuantidade de visualizações: 13633 vezes |
Nesta dica mostrarei como podemos usar o laço for da linguagem Python para exibir os números pares de 0 a 20. Note que usaremos os parâmetros start (valor inicial da variável de controle), stop (valor final da variável de controle, não incluído) e step (que especifica o valor de incremento da variável de controle. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- # função principal do programa def main(): for i in range(0, 21, 2): print(i, end = " ") if __name__== "__main__": main() Ao executar este código nós teremos o seguinte resultado: 0 2 4 6 8 10 12 14 16 18 20 |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |