Você está na página 1de 20

RACIOCÍNIO

ALGORÍTMICO

Juliano Vieira Martins


Conceitos básicos de
algoritmos em Python
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

 Descrever a estrutura básica de um algoritmo em Python.


 Analisar algoritmos e programas.
 Resolver problemas utilizando programação.

Introdução
As pessoas usam o pensamento lógico constantemente, muitas vezes
sem perceber. Por exemplo, quando você acorda de manhã e realiza uma
sequência de etapas até estar pronto para sair para o trabalho ou ir até a
universidade, você está utilizando o pensamento lógico-algorítmico. Se
todas essas etapas fossem escritas, obedecendo certa ordem, no formato
de itens de uma lista, haveria um algoritmo.
No seu cotidiano, sem se dar conta, você está continuamente resol-
vendo problemas por meio do pensamento lógico. Na computação,
isso não é diferente, e questões computacionais também podem ser
resolvidas por meio do pensamento lógico-algorítmico.
Neste capítulo, você vai estudar os conceitos básicos de algoritmos e
ver como eles podem ser usados para resolver problemas computacio-
nais. Para a solução desses problemas, é necessário usar o pensamento
lógico-algorítmico, aplicado na forma de instruções e com etapas bem
definidas para atingir determinado objetivo. Assim, você também vai
verificar como essas instruções podem ser representadas por meio
de estruturas visuais ou, na forma escrita, por meio de pseudocódigo.
Além disso, você vai ver exemplos de algoritmos na linguagem de
programação Python.
2 Conceitos básicos de algoritmos em Python

Resolução de problemas com programação


No momento da concepção de um programa e para que haja coerência com o
que se está propondo resolver, é necessária certa atenção para entender o pro-
blema e apresentar uma solução viável. Descobrir um método para solucionar
determinado problema não é uma tarefa tão simples assim. Dessa forma, a
construção de um programa pode ser melhor executada quando se levam em
conta alguns itens importantes. Veja a seguir.

 Requisitos do programa: você deve compreender as informações


fornecidas (a entrada) e os resultados que devem ser produzidos (a
saída). É preciso escrever uma descrição rigorosa da entrada e da saída,
que cubra todos os casos do programa.
 Arquitetura: na programação, sempre existe a possibilidade de lidar
com vários tipos de objetos e dados diferentes, como um cálculo, uma
lista, uma simulação, entre outras infinitas situações. Para cada caso,
haverá algumas operações básicas a serem executadas, como imprimir
algo, adicionar algo ou mesmo buscar algo. O ideal é escrever essas
operações na forma de pequenos procedimentos de algoritmo para
resolver o problema de acordo com os requisitos do programa. Também
é possível utilizar uma notação de linguagem natural, chamada pseu-
docódigo, para fazer uma descrição narrativa dos passos e da ordem
das instruções. Por sua vez, as instruções devem ser claras o bastante
para determinar de forma única e completa as ações necessária em
cada passo do programa.

O pseudocódigo (ou pseudolinguagem) é uma forma de representação


algorítmica (GUIMARÃES; LAGES, 1985). Além disso, é praticamente um
programa escrito em linguagem natural e que tem a possibilidade de ser
transmitido ao computador, com uso de algumas ferramentas que leem pseu-
docódigos. Para escrever códigos em pseudocódigo, é necessário conhecer
as instruções básicas de um pseudocódigo. A seguir, veja as instruções de
uma pseudolinguagem.

a) ESCREVA (“ ”): essa instrução é usada para exibir uma mensagem


na tela.
b) LEIA: essa instrução é usada para ler valores que são digitados no
teclado.
c) <- (recebe): essa instrução é usada como comando de atribuição.
Conceitos básicos de algoritmos em Python 3

d) INÍCIO: essa instrução é usada para iniciar o programa principal.


e) FIM: essa instrução é usada para finalizar o algoritmo principal.
f) VAR: essa instrução é usada para declarar variáveis.
g) ALGORITMO: essa instrução é usada para indicar o início do
programa.
h) FIM ALGORITMO: essa instrução é usada para indicar o final do
programa.
i) ENQUANTO: essa instrução é usada para iterar enquanto uma condição
for verdadeira.
j) PARA: essa instrução é usada também para iterar enquanto uma con-
dição for verdadeira.
k) FIM PARA: essa instrução é usada para indicar o final da instrução
PARA.
l) SE ... ENTÃO: essa instrução é usada para avaliar se uma expressão
é verdadeira ou falsa. Se for verdadeira, executa a instrução que está
no corpo.
m) SENÃO SE: essa instrução também é usada para avaliar se uma ex-
pressão é verdadeira ou falsa. Se for verdadeira, executa a instrução
que está no corpo.
n) SENÃO: essa instrução é usada para avaliar uma expressão caso as
instruções SE ou SENÃO SE não sejam executadas.
o) FIM SE: essa instrução é usada para indicar o final da instrução SE.

Veja a seguir um exemplo de algoritmo em pseudocódigo:

ALGORITMO “somar e escrever se a soma é maior, menor ou


igual a 10”
VAR
valor: real
soma: real
INÍCIO
soma <- 0
ESCREVA (“Digite um ‘valor’ ou 0 para parar:”)
LEIA valor
4 Conceitos básicos de algoritmos em Python

ENQUANTO valor <> 0 FAÇA


soma <- soma + valor
ESCREVA (“Soma atual: soma”)
ESCREVA (“Digite um ‘valor’ ou 0 para parar:”)
LEIA valor
FIMENQUANTO
SE soma > 10 ENTÃO
ESCREVA (“Soma é maior que 10”)
SENÃO SE soma < 10 ENTÃO
ESCREVA (“Soma é menor que 10”)
SENÃO
ESCREVA (“Soma é igual a 10”)
FIM SE
FIM
FIM ALGORIMTO

Além de serem representados pela pseudolinguagem, algoritmos também


podem ser representados por símbolos que compõem uma notação visual. O
conjunto desses símbolos dispostos de forma estruturada é conhecido como
fluxograma. Um fluxograma é um diagrama que descreve um processo,
sistema ou algoritmo de computador. Ele é amplamente utilizado em vários
campos para documentar, estudar, planejar, melhorar e comunicar processos
(às vezes) complexos em diagramas claros e fáceis de entender.
Os fluxogramas usam retângulos ovais, diamantes e outras formas para
definir o tipo de etapa, juntamente com as setas de conexão para definir o fluxo
e a sequência. Eles podem variar de gráficos simples e desenhados à mão a
diagramas detalhados, desenhados por computador, representando várias etapas
e rotas. Às vezes, os fluxogramas são chamados por nomes mais especializados,
como fluxograma de processo, mapa de processos, fluxograma funcional,
mapeamento de processos de negócios, modelagem e notação de processos de
negócios (Business Process Model and Notation — BPMN) ou diagrama de
fluxo de processos (Process Flow Diagram — PFD). Eles estão relacionados
a outros diagramas populares, como Diagramas de Fluxo de Dados (DFDs) e
diagramas de atividade da linguagem de modelagem unificada (Unified Modeling
Language — UML). A seguir, veja os símbolos mais comuns de um fluxograma.
Conceitos básicos de algoritmos em Python 5

 Terminal: tem a forma oval e é usado para representar o início e o fim


de um processo.
 Processo: tem a forma retangular e é obrigatório quando você inicia
o fluxograma. Representa qualquer etapa do processo, como tarefas
ou ações básicas.
 Seta (ou flecha): é usada para guiar o visualizador ao longo do caminho
do fluxograma e indicar qual é a direção do fluxo de dados.
 Decisão: tem a forma de um diamante e simboliza que é necessária uma
decisão para avançar. Pode ser uma escolha binária — por exemplo, sim
ou não, verdadeiro ou falso — ou mesmo uma decisão mais complexa,
com várias opções.
 Entrada/saída: tem a forma de um paralelogramo e simboliza a entrada
ou a saída de dados.

Com esses cinco símbolos básicos, você tem quase tudo o que é necessário
para diagramar um fluxograma simples (Figura 1).

Figura 1. Símbolos básicos de um fluxograma.

 Codificação: escolher adequadamente o que será utilizado para cada


tipo de dado torna a solução do problema mais eficiente. É no momento
da codificação que se escolhem as representações para os objetos de
dados que serão utilizados no algoritmo. Quando já se tem um pseu-
docódigo para a solução do problema, a tradução do algoritmo para
uma linguagem de programação é quase imediata. Na linguagem de
programação Python, por exemplo, existem vários tipos de objetos que
representam os conceitos de listas, matrizes, dicionários, filas, pilhas,
entre outras estruturas.
6 Conceitos básicos de algoritmos em Python

A seguir, veja o mesmo algoritmo apresentado em pseudocódigo, mas agora escrito


na linguagem de programação Python.

# somar e escrever se a soma é maior, menor ou igual a 10

soma = 0
valor = float(input("Digite um 'valor' ou 0 para parar:"))

while valor != 0:
soma += valor
print(f"Soma atual: {soma}")
valor = float(input("Digite um 'valor' ou 0 para parar:"))

if soma > 10:


print("Soma é maior que 10")
elif soma < 10:
print("Soma é menor que 10")
else:
print("Soma é igual a 10")

Análise de algoritmos e programas


A razão mais objetiva para se analisar um algoritmo é descobrir suas carac-
terísticas a fim de avaliar sua adequação a várias aplicações, ou compará-lo
com outros algoritmos para a mesma aplicação. Além disso, a análise de um
algoritmo pode ajudar o desenvolvedor a entendê-lo melhor e sugerir melhorias.
Os algoritmos tendem a se tornar mais curtos, mais simples e mais elegantes
durante o processo de análise.
Existe um ramo da ciência da computação teórica chamado complexidade
de algoritmos, cujo objetivo é classificar os algoritmos de acordo com sua
eficiência (SEDGEWICK; FLAJOLET, 2019). Do mesmo modo, um problema
computacional comumente chamado de complexidade computacional é
classificado de acordo com o seu nível de dificuldade. Essas classificações ge-
ralmente se concentram no desempenho do pior caso na ordem de crescimento.
Conceitos básicos de algoritmos em Python 7

Um dos pontos principais da análise de um algoritmo é o tempo. Uma


análise detalhada e completa do tempo de execução de um algoritmo envolve
as etapas listadas a seguir.

1. Implementar o algoritmo completamente para a análise.


2. Determinar o tempo necessário para cada operação básica, tais como
cálculos, repetições, instruções, etc.
3. Identificar quantidades desconhecidas que podem ser usadas para
descrever a frequência de execução das operações básicas, como a
quantidade de operações que crescem exponencialmente durante a
execução do algoritmo.
4. Desenvolver um modelo realista para a entrada no programa.
5. Analisar as quantidades desconhecidas, assumindo a entrada modelada.
6. Calcular o tempo total de execução multiplicando o tempo pela frequên-
cia de cada operação e adicionando todos os produtos da soma ao final.

Os algoritmos geralmente são bem diferentes entre si, embora muitas


vezes o objetivo deles seja o mesmo. Ao considerar um algoritmo para um
problema específico, você deve começar a perceber os padrões, para que tipos
de problemas semelhantes possam ser resolvidos com a ajuda desse algoritmo.
Por exemplo, sabe-se que um conjunto de números pode ser classificado por
meio de algoritmos diferentes. O número de comparações realizadas por um
algoritmo pode ser diferente da quantidade de comparações realizadas por
outro algoritmo, ainda que ambos sejam para a mesma entrada de dados.
Portanto, a complexidade do tempo desses algoritmos pode ser diferente. Além
disso, é necessário calcular o espaço de memória exigido por cada algoritmo.
Assim, você deve levar em conta sob quais hipóteses o algoritmo vai operar.
Geralmente, realizam-se os tipos de análise elencados a seguir.

 Pior caso: número máximo de etapas executadas em qualquer instância


do algoritmo.
 Melhor caso: número mínimo de etapas executadas em qualquer ins-
tância do algoritmo.
 Caso médio: número médio de etapas executadas em qualquer instância
do algoritmo.

Em resumo, a análise de algoritmo é o processo de analisar a capacidade de


resolução de problemas do algoritmo em termos de tempo e tamanho necessá-
rios (o tamanho da memória para armazenamento durante a implementação).
8 Conceitos básicos de algoritmos em Python

Para saber mais sobre o assunto deste capítulo, acesse o link a seguir (em inglês). Nele,
você vai encontrar excelentes explicações sobre níveis mais avançados de análises de
algoritmos, tais como análise assintótica e análise amortizada.

https://qrgo.page.link/RzqX5

Estrutura básica de algoritmo


A estrutura básica de um algoritmo é formada por vários componentes, co-
mumente encontrados na maioria dos algoritmos. Esses componentes deter-
minam como se dará o fluxo de execução da tarefa, desde a inicialização até o
encerramento (MOKARZEL; SOMA, 2008). Assim, pode haver determinado
problema que, para ser resolvido, requer uma quantidade maior ou menor de
componentes, dependendo da sua complexidade. Dessa forma, a execução de
um programa pode ser mais eficiente quando é levado em conta o comporta-
mento das estruturas básicas de algoritmos (Figura 2).

 Variáveis e constantes: esse componente de algoritmo possui conteúdo


temporário e é usado para armazenar informações adicionais que uma
instrução precisa para funcionar corretamente ou de forma efetiva. Seus
valores podem variar conforme a execução do algoritmo progride, por
isso o nome “variável”. Em contrapartida, as constantes armazenam
valores que não são alterados durante a execução do algoritmo. Por
exemplo, o valor PI usado para calcular a área do círculo é uma constante,
já que seu valor não muda.
 Instruções: a instrução é um dos componentes principais de um algo-
ritmo. Um algoritmo contém em si mesmo uma série de subalgoritmos,
sendo que cada um deles executa uma tarefa menor. Por exemplo, realizar
o cálculo de uma equação pode ser uma tarefa muito grande para ser
feita por apenas uma instrução. Assim, algumas tarefas, tais como
adição, subtração, multiplicação e divisão, podem ser consideradas ins-
truções menores e auxiliam na tarefa principal, que, no caso, é calcular
a equação. Dessa forma, todos os algoritmos podem ser, eventualmente,
divididos ou fatorados em instruções menores.
Conceitos básicos de algoritmos em Python 9

 Condicionais: em algum momento da execução de uma tarefa, alguns


algoritmos podem ter de tomar determinadas decisões. Por exemplo, se a
soma dos dois valores em questão for maior ou menor do que outro valor,
quando comparados, a tarefa segue por determinado caminho de fluxo;
caso contrário, a tarefa segue por outro caminho. Os componentes condi-
cionais permitem que um algoritmo execute instruções seletivamente com
base em certas condições que devem ser satisfeitas, dependendo do caso.
 Repetições: esse componente de algoritmo permite executar determinadas
instruções repetidas vezes, até que dada condição seja satisfeita. Existem
casos, como uma lista, em que é necessário repetir uma instrução para
cada elemento existente. Há também outros casos em que é preciso repetir
um conjunto de instruções até um objetivo ser alcançado, ou até uma
condição ser satisfeita. As repetições podem conter em si outras instruções,
incluindo repetições comumente chamadas de “repetições aninhadas”.

Figura 2. Fluxograma das estruturas básicas de algoritmo para controle de fluxo de execução.

Estruturas básicas de algoritmo em Python


Antes de você se aprofundar no assunto das estruturas básicas em Python,
deve entender o que realmente é essa linguagem e qual é o objeto pelo qual
ela foi criada. Python é uma linguagem de programação e, como tal, possui
algumas características ou atributos próprios. A seguir, veja o que, em síntese,
esses atributos querem dizer.

 Tem sintaxe bonita: nesse atributo, estão em jogo as regras que determi-
nam os comandos, as palavras reservadas, as declarações, a indentação
do código, as descrições formais, os operadores, etc.
10 Conceitos básicos de algoritmos em Python

 Tem semântica inteligente: a semântica é o significado de cada item


da sintaxe. Por exemplo, uma das instruções de repetição na linguagem
de programação Python tem a sintaxe while, e a semântica dessa sintaxe
é “repita enquanto a condição for verdadeira”.
 É uma linguagem interpretada: o interpretador do Python, que são os
algoritmos internos da linguagem, executa o código-fonte diretamente,
traduzindo cada linha de código para instruções de máquina.
 É de alto nível: o interpretador sabe lidar com os detalhes técnicos do
computador. Assim, desenvolver um código é mais simples do que em
linguagens de baixo nível, nas quais o programador deve se preocupar
com detalhes da máquina, tais como quantidade de memória disponível,
capacidade do processador, etc.
 É de propósito geral: o Python pode ser usado para desenvolver progra-
mas em diversas áreas, ao contrário de linguagens de domínio específico,
que são especializadas e atendem somente a determinada aplicação.
 É dinamicamente tipada: não é necessário informar o tipo no momento
da declaração da variável. O interpretador se encarrega de descobrir
que tipo tem cada variável.
 É fortemente tipada: em Python, não é possível realizar operações
com tipos diferentes. Por exemplo, na tentativa de somar um valor do
tipo int (inteiro) com outro valor do tipo list (lista), o Python levantará
uma exceção de erro.

Por essas e outras características, o Python consegue ser uma linguagem


simples, de sintaxe bonita, legível e amigável. Além disso, muitas empresas,
como a Nasa, o Google, o Facebook e a Amazon, utilizam o Python diariamente.

Para instalar a linguagem Python, primeiramente deve-se realizar o download do


interpretador da linguagem, acessando o primeiro link listado a seguir. Essa página
contém os links dos instaladores para variados tipos de sistemas operacionais, tais como
Windows, Linux e Mac OS X. Para cada tipo de sistema operacional, é recomendado
seguir o guia de instalação específico do Python, disponível no segundo link.

https://qrgo.page.link/2otU8

https://qrgo.page.link/oCyNg
Conceitos básicos de algoritmos em Python 11

O desenvolvimento do Python começou no final da década de 1980, por


Guido van Rossum. Ele decidiu usar esse nome porque estava lendo um ro-
teiro do Monty Python, um grupo de comédia britânico da década de 1970.
Assim, a versão 1.0 do Python foi publicada em 1994, a versão 2.0, em 2000,
e a versão 3.0, em 2008.

Há diversos ambientes integrados de desenvolvimento (no inglês Integrated Develop-


ment Environment — IDE) que dão suporte à linguagem de programação Python,
sendo que alguns são mais simples e outros são mais complexos. Esses ambientes
auxiliam significativamente nos seguintes quesitos: identificação das variáveis que
foram declaradas; identificação dos erros no código; personalização do ambiente de
trabalho; ocultação de parte do código para melhor visualização, etc. Ficam como
dica alguns IDEs:
 PyCharm Edu
 Atom
 IDLE
 Spyder
Assim, você pode pesquisar as características de cada um deles no Google, fa-
zer o download no site do desenvolvedor do IDE e instalar o que você achar mais
interessante.

Os algoritmos geralmente são criados usando pseudocódigo e são in-


dependentes das linguagens subjacentes, ou seja, um algoritmo pode ser
implementado em mais de uma linguagem de programação. Da mesma forma,
a maioria das linguagens de programação compartilha instruções básicas de
código, como as repetições, os controles de fluxo, etc. Assim, quase todos
os algoritmos têm a possiblidade de ser implementados na linguagem de
programação Python.
No Python, as variáveis, funções e estruturas de dados são tratadas como
objetos. Um identificador no Python é um nome usado para identificar
esses objetos.
12 Conceitos básicos de algoritmos em Python

A seguir, veja exemplos de identificadores para nomear objetos:

nome = "Paulo"
idade = 25
estado _ civil = "solteiro"
PI = 3.1415

Para declarar um identificador, você pode usar os conjuntos de letras (de


A até Z e de a até z), os dígitos (de 0 a 9) e também o caractere especial subli-
nhado (_) (ROSSUM, 2001). O Python não permite caracteres especiais para
identificadores, tais como os símbolos @, $ e %, pois alguns deles também
são operadores aritméticos nessa linguagem.

O Python é uma linguagem de programação sensível ao caso (case-sensitive), ou seja,


que faz distinção entre letras maiúsculas e letras minúsculas. Por exemplo, no Python,
os objetos do tipo string “feliz” e “FELIZ” são diferentes entre si.

Algumas linguagens de programação, como o Java e o PHP, exigem que,


para cada bloco de código, seja usado um par de chaves para indicar o corpo
do bloco. No Python, não são necessárias essas chaves, pois os blocos de
código são indicados por um recuo de linha, que é chamado de indentação
(PYTHON SOFTWARE FOUNDATION, 2019a). A quantidade de espaços
em branco na indentação é variável (geralmente quatro espaços), porém todas
as instruções dentro do bloco devem ser recuadas com a mesma quantidade
de espaços. Assim, todas as linhas recuadas com o mesmo número de espaços
formam um bloco de código, e este termina quando a próxima linha tiver uma
indentação diferente.
Conceitos básicos de algoritmos em Python 13

Veja um exemplo de bloco de código com uma estrutura de controle de fluxo:

if 'a' == 'b':
# início do bloco
print('a é igual a b')
a = 2 + 2
b = 1 + 3

Um tipo de dado é na verdade um conjunto de valores com um conjunto de


operações definidas para esses valores. O Python pode armazenar em memória
diferentes tipos de dados, pois esses tipos estão embutidos nessa linguagem de
programação. Por exemplo, imagine que seja necessário armazenar os dados
do endereço de uma pessoa. Isso pode ser feito do seguinte modo: o número
da casa da pessoa pode ser armazenado como um valor numérico, e o nome
da rua em que a pessoa mora pode ser armazenado como texto. No Python,
também é possível somar dois valores numéricos, mas não é possível somar
um número e uma frase (texto). Os tipos de dados mais comuns que o Python
possui são: numéricos, cadeias de caracteres (strings), listas, tuplas, conjuntos
e dicionários (PYTHON SOFTWARE FOUNDATION, 2019b).

Veja a seguir um exemplo dos tipos de dados lista e dicionário:

lista = [1, 2, 3, 4]

dicionario = {
'nome': 'Paulo',
'idade': 25,
'estado _ civil':
'solteiro'
}
14 Conceitos básicos de algoritmos em Python

Operadores são estruturas que podem manipular os valores dos dados


(PYTHON SOFTWARE FOUNDATION, 2019c). O Python dispõe de um
vasto conjunto de operadores para realizar operações. Esses operadores tam-
bém são chamados de “operadores relacionais”. Por exemplo, os operadores
de comparação analisam os valores em ambos os lados de uma expressão e
decidem a relação entre eles. Os operadores mais comuns são os que realizam
operações aritméticas, de comparação, lógicas, bit a bit, etc.

Veja um exemplo de alguns operadores aritméticos:

a = 2 + 2 # 4
b = 3 - 1 # 2
c = 4 * 3 # 12
d = 6 / 2 # 3

Estruturas de controle de fluxo avaliam expressões que produzem verda-


deiro ou falso como resultado. No Python, a tomada de decisão é de extrema
importância, pois é a antecipação das condições que ocorrem durante a execu-
ção do programa. Com essas estruturas, é possível seguir determinado fluxo
de execução e, de acordo com as condições (verdadeiro ou falso), tomar certas
decisões (PYTHON SOFTWARE FOUNDATION, 2019d).

Veja a seguir um exemplo de algumas estruturas de controle para decisão:

if a > b:
print('a é igual a b')
elif a < b:
print('a é diferente de b')
else:
print('a é b são iguais')
Conceitos básicos de algoritmos em Python 15

Uma estrutura de repetição permite executar uma instrução ou grupo


de instruções várias vezes. A linguagem de programação Python fornece
algumas estruturas para lidar com os requisitos de repetição. Essas estruturas
testam repetidamente a expressão e, se ela for verdade, executam o primeiro
conjunto; se a expressão for falsa, o que pode ser verificado na primeira vez que
ela é testada, o fluxo segue para o fim da repetição (PYTHON SOFTWARE
FOUNDATION, 2019d).

Veja um exemplo de duas estruturas de repetição:

# while
i = 0
while i < 5:
print(i)
i += 1

# for
for i in range(5):
print(i)

Nos links a seguir (em inglês), você pode consultar uma vasta gama de exemplos de
estruturas em Python.

https://qrgo.page.link/MXfDk

https://qrgo.page.link/8yXEX

https://qrgo.page.link/qftMj
16 Conceitos básicos de algoritmos em Python

GUIMARÃES, A. M.; LAGES, N. A. C., Algoritmos e estruturas de dados. Rio de Janeiro:


LTC, 1985.
MOKARZEL, F.; SOMA, N. Introdução à ciência da computação. Rio de Janeiro: Elsevier,
2008.
PYTHON SOFTWARE FOUNDATION. Built-in types. [2019c]. Disponível em: https://docs.
python.org/3/library/stdtypes.html. Acesso em: 30 dez. 2019.
PYTHON SOFTWARE FOUNDATION. Data types. [2019a]. Disponível em: https://docs.
python.org/3/library/datatypes.html. Acesso em: 30 dez. 2019.
PYTHON SOFTWARE FOUNDATION. Lexical analysis. [2019b]. Disponível em: https://
docs.python.org/3/reference/lexical_analysis.html?highlight=indent#indentation.
Acesso em: 30 dez. 2019.
PYTHON SOFTWARE FOUNDATION. More control flow tools. [2019d]. Disponível em:
https://docs.python.org/3/tutorial/controlflow.html?highlight=elif#more-control-
-flow-tools. Acesso em: 30 dez. 2019.
ROSSUM, G. PEP 8: style guide for Python code. 2001. Disponível em: https://www.
python.org/dev/peps/pep-0008/#naming-conventions. Acesso em: 30 dez. 2019.
SEDGEWICK, R.; FLAJOLET, P. An introduction to the analysis of algorithms. [2019]. Dispo-
nível em: https://aofa.cs.princeton.edu/home/. Acesso em: 30 dez. 2019.

Leituras recomendadas
PYTHON COURSE. Python3 tutorial. 2019. Disponível em: https://www.python-course.
eu/python3_course.php. Acesso em: 30 dez. 2019.
TUTORIALS POINT. DAA: methodology of analysis. 2019a. Disponível em: https://www.
tutorialspoint.com/design_and_analysis_of_algorithms/design_and_analysis_of_al-
gorithms_methodology.htm. Acesso em: 30 dez. 2019.
TUTORIALS POINT. Python tutorial. 2019b. Disponível em: https://www.tutorialspoint.
com/python/index.htm. Acesso em: 30 dez. 2019.
W3SCHOOLS. Python tutorial. 2019. Disponível em: https://www.w3schools.com/
python/. Acesso em: 30 dez. 2019.
Conceitos básicos de algoritmos em Python 17

Os links para sites da Web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a
rede é extremamente dinâmica; suas páginas estão constantemente mudando de
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade
sobre qualidade, precisão ou integralidade das informações referidas em tais links.

Você também pode gostar