Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumário
UNIDADE I................................................................................................................................. 4
Introdução ............................................................................................................................ 4
Instalação ............................................................................................................................. 5
A Linguagem De Programação Python ................................................................................... 6
Sintaxe Para Programação Python ....................................................................................... 11
Conclusão ........................................................................................................................... 16
UNIDADE II.............................................................................................................................. 17
Introdução .......................................................................................................................... 17
Tipos e Estruturas De Dados ................................................................................................ 18
Manipulação De Strings....................................................................................................... 22
Conclusão ........................................................................................................................... 32
UNIDADE III............................................................................................................................. 33
Introdução .......................................................................................................................... 33
Expressões e Operadores Aritméticos ................................................................................. 34
Operadores Relacionais....................................................................................................... 36
Operadores Lógicos............................................................................................................. 37
Operadores Compostos De Atribuição................................................................................. 39
Entrada e Saída ................................................................................................................... 42
Conclusão ........................................................................................................................... 47
UNIDADE IV ............................................................................................................................ 48
Introdução .......................................................................................................................... 48
Arquivos De Texto ............................................................................................................... 49
Estruturas De Controle De Fluxo De Execução ..................................................................... 52
Estrutura De Decisão ........................................................................................................... 52
Estrutura De Repetição ....................................................................................................... 56
Funções .............................................................................................................................. 60
Conclusão ........................................................................................................................... 65
UNIDADE V ............................................................................................................................. 66
Introdução .......................................................................................................................... 66
Orientação a Objetos .......................................................................................................... 67
Herança em Orientação a Objetos ....................................................................................... 69
Métodos Complementares .................................................................................................. 72
2
Módulos.............................................................................................................................. 75
Conclusão ........................................................................................................................... 82
3
UNIDADE I
Introdução
Por ser uma linguagem com licença do tipo open source (aberta), existe uma
grande comunidade de desenvolvedores que auxiliam no desenvolvimento
constante da linguagem, sua difusão e desenvolvimento de bibliotecas.
Desenvolvida nos anos 1980, e publicada em 1991, foi desenvolvida por Guido
van Rossum e se baseou num show de comediantes ingleses dos anos de 1970
(Monty Python’s Flying Circus) para batizar a linguagem criada.
4
Instalação
Fonte: O autor
Windows
Ubuntu
MacOS
5
Instale o Homebrew: https://brew.sh
Fonte: https://docs.python.org/3/
Este processo gera um tempo extra para que uma aplicação possa ser
executada, o que pode representar um peso maior em algumas aplicações que
em outras, mas o fato de o código poder ser escrito muito mais rapidamente e
sem a necessidade de conhecimento profundo da arquitetura do hardware onde
será executada a aplicação é muito importante.
Outro fato é que um código escrito em linguagens de alto nível acaba tendo
menores quantidades de linhas e sendo mais fáceis de interpretar, tornando
estas, opções preferidas pela maioria dos desenvolvedores.
6
Outra característica da linguagem é sua capacidade de trabalhar com diferentes
paradigmas de programação, ou seja, a estrutura dos códigos criados na
linguagem podem ser implementados de diferentes formas, de forma a oferecer
variadas formas de se desenvolver soluções computacionais.
Um dos paradigmas que podem ser utilizados se chama imperativo, que é o mais
comum e tradicional onde a execução do código segue um fluxo normal, mas
que pode ser desviada sem problemas com estruturas de controle de fluxo. O
objetivo principal deste paradigma é o processamento de dados através de
instruções que mudam os estado das estruturas de dados que contém estes
dados.
7
A linguagem também possui código aberto (open-source), e com isto, foi
adaptada para variadas plataformas como Windows, Android e MacOS, com seu
uso permitido, tanto para uso educacional e científico, quanto comercial.
Possui uma grande biblioteca padrão com funcionalidades prontas para uso no
desenvolvimento de interfaces gráficas, trabalho com bases de dados e redes,
por exemplo, assim como bibliotecas desenvolvidas pela comunidade de
desenvolvedores que também adicionam outra grande variedade de código
pronto e livremente utilizável.
8
compiladas em compiladores de cada sistema operacional onde devam ser
executados.
Para que seja possível a geração de um executável, é preciso que seja instalado
um complemento para a IDE Python chamado de Pyinstaller através do comando
“pip install pyinstaller”. Este comando irá agregar a funcionalidade ao Python na
máquina e assim, é possível gerar um executável a partir de um código usando
o comando “pyinstaller código.py”.
9
um código todo ser fornecido de antemão, e através de um prompt de comandos
fornecido por uma interface do tipo shell (>>>) pode-se ir inserindo um a um os
comandos se desejado como mostrado na figura 1.3.
Fonte: O autor.
Graças a esta grande variedade, áreas como Big Data, inteligência artificial e
aprendizado de máquina são altamente exploráveis e ajudaram a impulsionar o
uso da linguagem no mercado de desenvolvimento de software.
10
para ser executada em um interpretador da versão 3, ou vice-versa, pois a
sintaxe básica e adição ou exclusão de comandos pode ser ajustada por
interpretadores próprios para tal função, mas as bibliotecas podem ou não terem
sido ajustadas, e assim, há o risco do não funcionamento de algumas funções
que poderiam inviabilizar a execução de aplicações.
11
preferível o uso de espaços ao invés de tabulações, e o uso conjunto dos dois
tipos de espaçamento num mesmo código pode gerar problemas.
Mantendo linhas de código com até 79 caracteres por linha, um código se torna
mais fácil de ser interpretado e editado, mas alguns comandos mais longos, ou
que estejam com uma endentação muito a direita podem não caber e para dividir
linhas de comando em mais de uma linha de texto, pode-se encerrar uma linha
com o caractere “\” e continuando um comando na linha de baixo. Outro recurso
é que expressões em parenteses, colchetes e chaves podem ser divididas em
linhas sem o uso da barra invertida. Observe o exemplo da figura 1.4.
Fonte: O autor.
12
ou entrada e saída de dados, por exemplo. A seguir, segue a lista de palavras
reservadas da linguagem Python na figura 1.5.
COMANDO DESCRIÇÃO
and Operador lógico e.
as Cria nome alternativo.
assert Para depuração e validação de condições.
break Interromper laço.
class Definição de classe.
continue Pular para próxima iteração de laço.
def Declaração de função.
del Exluir objeto.
elif Alternativa complementar ao comando if
else Alternativa complementar aos comandos if e elif.
except Complemento do comando try e finally.
False Valor lógico para falso.
finally Complemento do comando try e except.
for Laço de repetição condicional contado.
from Importação de parte de um módulo.
global Declara variável global.
if Comando para estrutura condicional.
import Importar módulo.
in Verificação de presença de conteúdo em listas e dicionários.
is Testa se duas variáveis são iguais.
lambda Declarar função anônima.
None Valor nulo.
nonlocal Declarar variável não-local.
not Operador lógico para não.
or Operador lógico ou.
pass Ignora erro de função vazia sem código, por exemplo.
raise Tratamento pontual de exceção.
return Retorno de uma função.
13
True Valor lógico para verdadeiro.
try Para tratamento de exceções pelo código.
while Laço de repetição condicional.
with Fechamento de arquivos abertos.
yield Semelhante a return, mas pode haver mais de um retorno.
Figura 1.5: Palavras reservadas da linguagem Python.
Fonte: O autor.
Nomes como: nome, Nome, DADO, Tipo1, valor2, tipo_de_dado e _1 são todos
exemplos válidos de identificadores, mas #dado, 123dado, valor% e ?!@, por
exemplo, são exemplos de identificadores inválidos para a linguagem Python.
14
É interessante seguir padrões de nomenclatura para facilitar a interpretação de
scripts mais longos e manter código dentro de uma regra padrão de digitação de
identificadores, palavras-chave, etc., mas estas regras podem variar quando se
programa em um paradigma ou outro, pois há elementos que constam em um
paradigma e não em outro.
Nomes como “dado”, “Dado” e “DADO” são todos considerados diferentes como
identificadores e podem ser todos os três utilizados num mesmo programa sem
problemas, tirando o fato de poderem confundir o desenvolvedor pela
semelhança.
15
Conclusão
Nesta primeira unidade foi possível conhecer alguns aspectos básicos iniciais da
linguagem Python como sua instalação de diferentes formas para preparação
dos estudos.
16
UNIDADE II
Introdução
17
Tipos e Estruturas De Dados
Até algum tempo, este acúmulo todo de dados era pouco explorado e tinha um
caráter mais de registro histórico, mas com o passar do tempo, foi percebido o
grau de informação que mesmo dados históricos poderiam trazer ao mercado, e
complementar estratégias mercadológicas em geral.
18
Os números inteiros aceitam quaisquer números sem casas decimais não tendo
limitações pré-definidas, mas apenas o esgotamento dos recursos de hardware
como limite, e assim, a linguagem pode lidar com números inteiros com muitos
dígitos.
19
tupla = ( 1, 2, 3, 4)
conjunto = {1, 2, 3, 4, 5}
dicionário = {1:’A’, 2:’B’, 3:’C’}
Figura 2.1: Exemplos de coleções de dados em Python.
Fonte: O autor.
No terceiro exemplo, uma tupla é definida com quatro elementos, e estes não
podem ser modificados e nem a estrutura da tupla pode ser modificada, sendo
assim uma espécie de constante, que por este motivo possui desempenho mais
rápido em operações de busca, por exemplo.
20
Alguns caracteres especiais podem ser incluídos em strings para
complementação e os principais estão indicados na figura 2.2.
Marcador Caractere
\\ Barra invertida
\’ Aspas simples
\” Aspas Duplas
\n Nova Linha (Enter)
\t Tabulação horizontal
\v Tabulação vertical
\b Retorno de carro
\a Beep ou sinal sonoro padrão do hardware
Figura 2.2: Caracteres especiais e sua representação em Python.
Fonte: O autor.
Um recurso útil que pode ser utilizado é a conversão forçada para dados
(casting) que pode inclusive alterar dados e ajustá-los de acordo com alguma
solicitação realizada. Para isto, basta utilizar um dos tipos padrão de dados
simples para forçar o dado em questão a ser adequado ao tipo definido como
pode ser observado nos exemplos da figura 2.3.
21
valor2 = int ("10")
valor3 = 15.5
print (valor1 + valor2 + int (valor3))
35
15.5
Figura 2.3: Exemplo de uso de conversão forçada de tipo.
Fonte: O autor.
Neste exemplo da figura 2.3, são utilizadas três variáveis, mas apenas duas têm
seus dados convertidos para inteiros logo na sua inicialização. A terceira tem seu
valor convertido apenas para utilização como um dos operadores passados
como parâmetro para a expressão da função print(). Depois, em posterior
exibição do valor da variável valor3 sem conversão, pode-se observar que seu
valor original foi mantido.
Manipulação De Strings
22
Observe o exemplo de código a seguir na figura 2.4 contendo formas de uso das
aspas em funções de saída de dados e atribuições.
texto = 'Teste'
print ("\nString indicada por aspas simples: ")
print (texto)
texto = "Teste do uso de ‘aspas simples’"
print ("\nString indicada por aspas duplas: ")
print (texto)
texto = '''Teste de uso de "aspas duplas"'''
print ("\nString indicada por aspas triplas: ")
print (texto)
texto = '''Texto utilizando quebras
de linha'''
print ("\nString indicada por aspas simples: ")
print (texto)
Figura 2.4: Exemplos de uso das aspas em strings.
Fonte: O autor.
Estes exemplos da figura 2.4 servem para ilustrar diferentes usos das aspas
simples, duplas e triplas indicando as possibilidades de uso de outros tipos de
aspas dentro das strings a serem exibidas ou formatação diferenciada permitida
com as aspas triplas.
23
texto = "Teste"
print ("\nQuarto caractere da string: ")
print (texto[3])
print (texto[1:3])
texto[0] = "t"
print (texto)
del texto
print (texto)
Figura 2.5: Exemplos de uso das aspas em strings.
Fonte: O autor.
A atribuição pode ser utilizada tanto para se incluir dados em variáveis, por
exemplo, e esta inclusão normalmente ocorre com dados que preenchem as
variáveis, mas no caso das strings, como representam listas de dados, estas
podem ter dados atribuídos de forma a preenche-las por completo como na linha
texto = "Teste", ou parcialmente através do uso de índice como foi feito na linha
texto[0] = "t" que ajustou apenas um caractere da string.
Excluir caracteres de uma string é algo que pode ser feito, mas não de forma tão
direta. Existe o comando del que apaga o conteúdo todo de uma string de uma
vez apenas como mostrado na figura 2.5 pela linha del texto, mas a exclusão
de um ou mais caracteres separadamente é algo que deve ser realizado por um
processo que deve ser implementado através de uma varredura na string e
posterior deslocamento dos caracteres seguintes para posições anteriores
sucessivamente de forma a dar a impressão do caractere ter sido suprimido.
24
Uma string também pode ser composta por strings que unidas, formam uma nova
cadeira de caracteres e pode ser um recurso bastante útil na manipulação de
dados deste tipo. Casos como nomes de pessoas obtidos separadamente
podem ser unidos, partes de um endereço, etc. A seguir seguem alguns
exemplos de uso de strings compostas por partes nos exemplos da figura 2.6.
Fonte: O autor.
Nos exemplos trazidos na figura 2.6, o primeiro trecho utiliza as strings 'Parte 1',
'Parte 2', 'Parte 3' como elementos para compor uma nova string armazenada
na variável texto. A exibição ocorre nesta ordem, pois as chaves que
representam índices para cada parte, estão em branco, e assim, prevalece a
ordem de inserção, mas no segundo trecho, a indicação "{1} {0} {2}" faz com
que a ordem de exibição se altere e o elemento 'Parte 2' seja exibido antes do
elemento 'Parte 1'.
No terceiro trecho do código do exemplo da figura 2.6 é mostrado como se pode
utilizar alinhamento na exibição através dos parâmetros "|{:<10}|{:^10}|{:>10}|"
25
que permitem a exibição dos elementos da string alinhados respectivamente a
esquerda, centralizado e a direita.
Na sequência, o último trecho de código traz um exemplo de número formatado
com duas casas decimais através do parâmetro "{0:.2f}" utilizado juntamente
com o método format para ajustar o resultado da divisão entre 1 e 3 que resulta
em dízima periódica e é reduzida a 0,33.
Complementarmente ao que foi citado até o momento sobre a manipulação de
strings utilizando recursos próprios da linguagem Python, existem muitos
métodos desenvolvidos para proporcionar funcionalidades adicionais
importantes para a manipulação de strings.
Alguns exemplos de métodos que podem ser utilizados com maior ou menor
frequência aplicados em uma string qualquer indicada por “s” são descritas a
seguir na tabela 2.1.
26
s.count(t) Devolve a quantidade de ocorrências de um caractere
especificado pelo parâmetro “t” na string.
s.find(t, start, end) Retorna a posição para um caractere “t” encontrado na
string. Se nada for encontrado retorna -1.
s.isalnum() Devolve verdadeiro (True) se a string não estiver vazia
e apenas com caracteres alfanuméricos.
s.isalpha() Devolve verdadeiro (True) se a string não estiver vazia
e apenas com letras.
s.isdecimal() Devolve verdadeiro (True) se a string não estiver vazia
e apenas com números no padrão Unicode.
s.isdigit() Devolve verdadeiro (True) se a string não estiver vazia
e apenas com números no padrão ASCII.
s.islower() Retorna verdadeiro (True) se todos os caracteres de
uma string são considerados minúsculos.
s.isuper() Retorna verdadeiro (True) se todos os caracteres de
uma string são considerados maiúsculos.
s.join(t) Insere o caractere “t” entre cada caractere da string.
s.lower() Converte e retorna todos os caracteres da string
minúsculos.
s.upper() Converte e retorna todos os caracteres da string
maiusculas.
s.partition(t) Retorna a string fracionada em três partes, sendo a
parte antes do caracteres “t”, o próprio caractere e a
parte posterior.
s.split(t) Retorna uma série de strings fracionadas da string
original utilizando o caractere “t” como separador, ou
espaços em branco se não for indicado um caractere
específico.
s.swapcase() Retorna nova string invertendo caracteres maiúsculos
e minúsculos.
s.title() Devolve nova string onde todos os primeiros
caracteres da string original são convertidos em
maiúsculos.
27
s.zfill(n) Retorna nova string onde, caso a string seja menor que
“n”, os caracteres mais a esquerda são preenchidos
com zeros.
Tabela 2.1: Exemplos de métodos para manipulação de strings.
Fonte: O autor.
Para testar estes métodos é interessante criar scripts com código contendo estes
métodos para manipular e atuar em strings diversas aplicando estes métodos
para compreender como podem ser utilizados, assim como é mostrado no
exemplo de script da figura 2.7.
texto1 = texto.lower();
print ("Todos os caracteres em minúsculo: " + texto1)
texto2 = texto.upper();
print ("Todos os caracteres em maiúsculo: " + texto2)
texto3 = texto.swapcase();
print ("Inversão entre maiúsculas e minúsculas: " + texto3)
texto4 = texto.title();
print ("Primeira letra maiúscula: " + texto4)
28
print (texto.count("e",0,15))
Fonte: O autor.
Nos exemplos do script da figura 2.7, inicialmente são declaradas duas variáveis
texto e letra. Na sequência a string é exibida apenas para conferência do que
está contido na variável texto.
29
uma sequência de 30 traços, de acordo com o alinhamento indicado em cada
comando com os métodos center, ljust e rjust.
Observe o exemplo da figura 2.8 que mostra como se pode extrair valores
numéricos de uma string qualquer.
import re
def buscaNumeros (texto):
resultado = re.findall (r'[0-9]+', texto)
return resultado
texto = "abc12def34fgh56ij78kl90"
resultado = buscaNumeros (texto)
print (*resultado)
Figura 2.8: Exemplo de uso de expressões regulares.
Fonte: O autor.
30
armazenadas na variável resultado que é devolvida como retorno da função para
o código principal.
31
Conclusão
Ao final dos estudos desta unidade, pode-se concluir que houve uma evolução
no aprendizado e elementos mais técnicos da linguagem estão sendo tratados
de forma a aumentar a compreensão da linguagem e suas particularidades.
Os dados podem ser organizados de forma simples, mas também podem ser
agrupados em estruturas mais complexas como as que foram tratadas, mas uma
delas teve um enfoque maior nesta unidade devido às suas muitas aplicações.
32
UNIDADE III
Introdução
33
Expressões e Operadores Aritméticos
>>> 2 + 2
4
>>> 1/3
0.3333333333333333
>>> 1//3
0
>>> 5 % 4
1
>>> 2 % 3
2
>>> 2*3
6
>>> 2**3
8
>>> 2 + (3 * 2) ** 2
38
>>> 2 + 3 * 2 ** 2
34
14
Figura 3.1: Exemplos de expressões e comandos no shell Python.
Fonte: O autor.
Na sequência, a figura 3.1 traz o uso do operador asterisco simples e duplo para
demonstrar as operações de multiplicação e exponenciação que são,
respectivamente realizadas com estes operadores.
Por fim, a figura 3.1 traz um exemplo de expressão usando diferentes operadores
e estabelecendo precedência forçada em uma das operações com o uso de
parênteses. Sem eles, o resultado da operação seria diferente, como mostrado
também na figura 3.1, e assim os resultados variam entre 38 com parênteses
que força a soma ser realizada primeiro, e 14, sem os parênteses.
35
um pequeno equívoco na elaboração de expressões pode não gerar erros de
sintaxe, mas pode comprometer toda a validade do código implementado.
Operadores Relacionais
Os operadores relacionais são == (igual), != (diferente), > (maior), < (menor), >=
(maior ou igual), e <= (menor ou igual), e são utilizados com um operando a
esquerda do operador e outro a direita como mostrado nos exemplos da figura
3.2.
>>> 1 > 1
False
>>> 1 >= 1
True
>>> 2 == 2
36
True
>>> 3 >= 2
True
>>> print (5 < 6)
True
Figura 3.2: Exemplos de uso de operadores relacionais.
Fonte: O autor.
Operadores Lógicos
Para elaborar estas composições, é preciso estar atento a regras para uso de
operadores lógicos que são capazes de integrar condições simples, pois seu uso
se baseia na teoria de tabelas-verdade e para analisar este funcionamento,
observe os exemplos da figura 3.3.
37
>>> (3 > 4) and (5 >= 2)
False
>>> (3 < 4) and (5 >= 2)
True
>>> (3 > 4) or (5 >= 2)
True
>>> (3 < 4) or (5 >= 2)
True
>>> (3 > 4) or (5 <= 2)
False
Figura 3.3: Exemplos de uso de operadores lógicos e relacionais.
Fonte: O autor.
Nos dois primeiros exemplos, o que acontece é que a primeira condição (3 > 4)
é falsa, e por isto, o operador “and” automaticamente já retorna falso, pois para
que este operador retorno verdadeiro, é preciso que todas as condições sejam
verdadeiras, como ocorre no exemplo seguinte onde (3 < 4).
Nos três exemplos finais, utiliza-se o operador “or” para avaliar combinações das
condições utilizadas nos dois primeiros exemplos. No exemplo (3 > 4) or (5 >=
2), como pelo menos a segunda condição é verdadeira, a expressão toda já
resulta verdadeiro.
No exemplo (3 < 4) or (5 >= 2), como as duas condições são verdadeiras, basta
a primeira ter sido verdadeira para que a expressão também retorne verdadeiro.
Apenas na última expressão onde ambas as condições são falsas, o resultado
foi também falso. Observe a tabela 3.1 a seguir contendo os resultados possíveis
para os operadores “and” e “or”.
38
CONDIÇÃO 1 CONDIÇÃO 2 AND OR
V V V V
V F F V
F V F V
F F F F
Tabela 3.1: Combinações de resultados para os operadores AND e OR.
Fonte: O autor.
A partir desta tabela 3.1, é possível observar que para uma expressão “and”
resultar verdadeiro, todas as condições precisam também ser verdadeiras, e no
caso do operador “or”, apenas será falsa uma expressão onde todas as
condições resultarem também falsas.
>>> x = 5
>>> x = x + 5
>>> x += 5
>>> print (x)
15
>>> x -= 3
>>> print (x)
39
12
>>> x *= 2
>>> print (x)
24
>>> x /= 3
>>> print (x)
8.0
>>> x %= 3
>>> print (x)
2.0
Figura 3.4: Exemplos de operadores compostos de atribuição.
Fonte: O autor.
Assim, conhecendo os operadores e podendo então estar apto a lidar com dados
básicos em Python, é possível seguir adiante com os estudos.
40
Dois operadores importantes e não muito comuns em muitas linguagens são os
operadores “is” e “in” que representam operações de comparação entre objetos
e entre elementos e objetos. Observe o exemplo de uso dos operadores na figura
3.5.
x = [1, 2]
y = [1, 2]
z=x
print (x is z)
print (x is y)
print (x == y)
print (2 in x)
True
False
True
True
Figura 3.5: Exemplos de uso de operadores para objetos.
Fonte: O autor.
Neste exemplo da figura 3.5 de uso de operadores “is” e “in” são declarados dois
objetos x e y contendo listas de dados numéricos. Depois é associado ao objeto
z, o objeto x. A partir destas atribuições, as funções print() exibem diferentes
resultados True ou False em função do uso dos operadores para objetos.
A primeira função print() retorna True, pois como x foi atribuído a z, ambos são
considerados o mesmo objeto pela atribuição feita, ao passo que a segunda
função retorna False, pois mesmo tendo os mesmos elementos, não
representam o mesmo objeto.
41
Depois, a terceira função retorna True, pois os dois objetos x e y possuem os
mesmos objetos, e a última função retorna True também, pois o elemento 2 está
contido nos dados do objeto x.
Entrada e Saída
Fonte: O autor.
42
No primeiro exemplo da figura 3.6, uma exibição simples da string ‘Texto
Exemplo’ ao usuário, lembrando que as strings em Python são identificadas com
aspas simples ou duplas, mas as simples são mais comumente usadas no
desenvolvimento de software. Outro detalhe relevante é que na versão 2 da
linguagem, não se utilizam parênteses na função print() para indicar seus
parâmetros.
Um detalhe curioso exibido no terceiro exemplo da figura 3.6 é o uso da letra “r”
como parâmetro logo à esquerda da string no comando para que o caractere
especial “\n” seja tratado como texto simples a ser exibido, perdendo assim,
naquele comando, a função de quebra de linha. Este recurso é utilizado quando
se deseja que a própria representação do caractere seja exibida numa string.
Por último, no quarto exemplo da figura 3.6, o uso da vírgula permite que mais
de um parâmetro seja passado à função print() e todos sejam processados
sequencialmente pela função, observando que não apenas strings podem ser
utilizadas como parâmetros na função print().
A função input() permite a entrada de dados em Python e por ser uma função,
necessita que um dado retornado seja armazenado em uma estrutura de dados
para que este dado seja armazenado em memória temporária e esteja
posteriormente disponível para processamento durante a execução do
programa.
dado = input()
43
nome = input ('Digite seu nome: ')
Fonte: O autor.
44
É possível usar operadores em strings
É possível usar operadores em strings
É possível usar operadores em strings
É possível usar operadores em strings
É possível usar operadores em strings
É possível usar operadores em strings
É possível usar operadores em strings
Fonte: O autor.
Nos exemplos da figura 3.8, o primeiro contém uma multiplicação de uma string
como parâmetro da função de saída que faz com que como resultado, a string
seja repetida certo número de vezes, assim como no exemplo seguinte onde o
símbolo “#” é multiplicado duas vezes para gerar um simples efeito de destaque
em conjunto com o texto a ser exibido, e por fim, o último exemplo une os
componentes variados que podem ser combinados como parâmetros.
45
# Exemplo de comentário de apenas uma linha
''' Comentários com mais de uma linha
podem ser divididos em blocos utilizando-se
o limitador '''
Figura 3.9: Exemplos de uso de comentários em linguagem Python.
Fonte: O autor.
Nos exemplos da figura 3.9, como o próprio texto do exemplo cita, o símbolo “#”
é utilizado para comentários curtos de apenas uma linha no editor, e os
comentários utilizando o delimitador de três aspas simples pode se dividir em
várias linhas para que parágrafos inteiros possam ser utilizados como
comentários.
46
Conclusão
47
UNIDADE IV
Introdução
48
Arquivos De Texto
Para se trabalhar com arquivos do tipo texto, mais comuns e que representam
um tipo de dado bom para se complementar o uso da função print() de saída de
dados.
Um detalhe sobre arquivos de texto, é que este tipo de arquivo contém dois
caracteres especiais que significam EOL que representa o final de cada linha de
texto, e EOF que representa o final do arquivo em si. Para o final de linha, pode-
se utilizar \n como em strings normais da função de saída de dados.
Além da função open(), há métodos que são acionados com o objeto de arquivo
instanciado para funcionalidades de manipulação do arquivo como write() para
adicionar texto ao arquivo, seek() para posicionamento no arquivo, read() para
leitura de dados, e close() para fechamento do arquivo de forma adequada,
reduzindo a chance de se corromper o arquivo.
49
Observe o exemplo de script da figura 4.1 para compreender o processo de
abertura de um arquivo de texto, a inserção de dados neste, a busca pelo texto
inserido e sua exibição ao usuário.
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Figura 4.1: Exemplo de abertura de dados
50
do arquivo todo e posterior exibição destes. Por fim, o método close() associado
ao objeto file fecha o arquivo.
import os
os.remove("arquivo.txt")
os.rmdir("Dados")
Figura 4.2: Exemplos de uso de funcionalidades do sistema operacional.
Fonte: O autor.
51
Estruturas De Controle De Fluxo De Execução
Avançando nos estudos de programação Python, inicia-se uma nova etapa onde
a lógica é utilizada para que se estruture scripts que possam tomar decisões de
forma automática a partir de condições que são implementadas no
desenvolvimento, mas que o fluxo de execução só é afetado durante a execução,
a partir da variação de dados em tempo real geralmente.
Estrutura De Decisão
Digite um valor: 5
Digite outro valor: 7
Entre 5 e 7 O segundo valor é maior.
Figura 4.3: Exemplo de estrutura de decisão ou condicional.
52
Fonte: O autor.
Neste exemplo da figura 4.3, os valores para duas variáveis são solicitados ao
usuário para depois, estes valores serem analisados pela estrutura da decisão.
Esta estrutura de decisão é composta por três etapas, onde cada etapa utiliza
um comando diferente e age de forma diferente.
Caso as etapas anteriores a última tenham todas valores falso para as condições
e nada seja executado até então, a última etapa utiliza o comando else para
exibir a mensagem de que o segundo valor é maior que o primeiro, pois seria
esta referente a qualquer situação não atendida pelas condições anteriores, e
assim, nem necessita de uma condição para este comando.
53
valor1 = input ('Digite um primeiro valor: ')
valor2 = input ('Digite um segundo valor: ')
valor3 = input ('Digite um terceiro valor: ')
# Análise apenas se valor1 > valor2
print (valor1, "é maior que", valor2) if valor1 > valor2 else print(valor2, "é
maior que", valor1)
# Análise mais completa verifica quem é maior ou se são iguais entre valor1
e valor2.
print (valor1, "é maior que", valor2) if valor1 > valor2 else print(valor1, "e",
valor2, "iguais") if valor1 == valor2 else print(valor2, "é maior que", valor1)
Fonte: O autor.
54
dado = int (input ('Digite um valor: '))
resto = dado % 2
if dado >= 0:
print("Este valor é positivo...")
if resto == 0:
print("e é par.")
else:
print("e é ímpar.")
else:
print (“Este valor é negativo.”)
Figura 4.5: Exemplo de estrutura de decisão aninhada.
Fonte: O autor.
Um primeiro ponto é que se não for utilizado o método int() para conversão da
entrada de dados para a variável dado de forma a garantir o tipo desejado para
a condição, o interpretador pode acusar erro. Outro ponto de atenção é que a
operação que verifica se o valor contido na variável dado dividido por 2 gera
valor exato ou sobra 1 é feita antes da avaliação na condição, pois a linguagem
não aceita a operação na condição do comando if.
55
menor que zero, apenas mostra ao usuário uma mensagem informando que o
valor é negativo.
Estrutura De Repetição
Um comando que pode ser utilizado para este tipo de situação é while que aceita
condições como parâmetros para sua estruturação, assim como os comandos if
ou elif, mas a forma como são elaboradas estas condições é diferente, pois a
finalidade do uso deste comando while é diferente. Observe o exemplo da figura
4.6.
i=1
while i <= 5 :
print(i)
i += 1
else:
print("Não há mais valores menores ou iguais a 5 para serem exibidos.")
1
2
3
4
Não há mais valores menores ou iguais a 5 para serem exibidos.
Figura 4.6: Exemplo de uso de estrutura de repetição com comando while.
Fonte: O autor.
56
Esta estrutura se baseia na evolução de iterações que vão ocorrendo em tempo
real, e dentro destas, algum valor deve ser alterado em algum momento para
que a condição de repetição deixe de ser satisfeita e o laço de repetição possa
ser encerrado, caso contrário, ele se tornará um laço de repetição infinita, não
desejado na maioria das vezes.
Nesse exemplo da figura 4.6, uma variável i que servirá como contadores é
iniciada com 1 (poderia ser qualquer valor inteiro) e ela é utilizada na condição
de controle de iterações do laço de repetição.
Seu valor a cada iteração é acrescentado em uma unidade após seu valor ser
exibido pela função print(). Ao final de cada iteração, a condição é verificada, e
nesse caso, enquanto o valor contido na variável i não for superior a 5, as
instruções do laço continuam sendo executadas.
i=1
while i < 10:
if i == 3:
i += 1
continue
if (i == 7):
57
break
print(i)
i += 1
1
2
4
5
6
Figura 4.7: Exemplo de estrutura de repetição.
Fonte: O autor.
Neste exemplo da figura 4.7, é possível observar o uso dos dois comandos para
interrupções no laço. O uso do comando continue faz com que após este
comando, uma iteração seja interrompida e a próxima seja executada, e por isto,
como este comando é executado quando o valor da variável i é 3, ocorre o
incremento, mas os comandos posteriores a continue não são executados e o
valor não é exibido pela função print().
58
1
2
3
4
Figura 4.8: Exemplo de laço de repetição contado.
Fonte: O autor.
Neste exemplo da figura 4.8, é importante observar que o comando for também
se baseia em uma variável contadora i, mas de antemão já define que serão
efetuadas 5 iterações, e como é padrão da linguagem Python iniciar contagem
de laços deste tipo em zero, são efetuadas iterações de 0 a 4.
dados = [1, 2, 3, 4]
dados2 = ["A", "B", "C"]
for i in dados:
print (i)
for i in dados2:
print (i)
1
2
3
4
A
B
C
Figura 4.9: Exemplos de laços de repetição contados sem especificação prévia.
Fonte: O autor.
Este outro exemplo na figura 4.9 traz uma variação do uso do comando for,
deixando-o mais autônomo para definir quando encerrar as iterações, pois sem
59
ter um valor limite estabelecido, seguirá executando iterações até que algum fato
encerre a sequência.
Nesse caso, o primeiro laço encerra quando a lista de quatro elementos for toda
percorrida e os seus elementos exibidos, ao passo que o segundo laço terá três
iterações devido aos três elementos do objeto dados2.
Esta forma de laço pode ser utilizada para se percorrer um arquivo e todos os
seus dados lidos mudando-se apenas o objeto de lista para o que foi instanciado
com o nome do arquivo e depois aberto para manipulação.
Funções
Toda função deve ser implementada de forma que seja até certo ponto
independente, pois seu código é contido em uma estrutura que só pode ser
acessada pela invocação da função através de seu nome.
60
return dado[1] * 2
funcao ()
funcao (2)
print (funcao2(3))
print (funcao3(4, 5))
2
4
6
10
Figura 4.10: Exemplo de uso de funções em Python.
Fonte: O autor.
Neste exemplo da figura 4.10, são implementadas três função que são
declaradas através do comando def, um nome a escolha do desenvolvedor e a
indicação de parâmetros aceitos. A primeira função realiza a ação de exibição
do resultado sem retornar nenhum dado ao trecho de código que a chamou.
Uma diferença entre a segunda e terceira funções é que a terceira não especifica
uma quantidade fixa de parâmetros e assim, utilizando o símbolo *, deixa a
critério do trecho de código que a chama especificar a quantidade de dados que
deseja informar como parâmetros de entrada para a função. Neste caso, o
código interno da função pode selecionar qual dos parâmetros informados será
utilizado através de um índice informado entre conchetes.
É por isso que o último valor obtido na execução do código foi 10 e não 8, pois
o índice 1 utilizado representa o segundo parâmetro recebido pela função (caso
61
tenha sido informado), lembrando que a contagem dos parâmetros inicia com o
índice 0.
2
3
23
4
5
9
Figura 4.11: Exemplo de função lambda.
Fonte: O autor.
No exemplo da figura 4.11, é definida uma função lambda que aceita dois
parâmetros e a partir deles, realiza uma soma simples. Para mostrar como é
importante tratar os dados a serem utilizados, um primeiro uso da função pede
dois dados sem definição de tipo para que o operador seja utilizado, mas como
62
é priorizado o tipo caractere por ser mais amplo, ao invés de uma soma, é
realizada a concatenação das strings “2” e “3”.
def f (dado1):
return lambda f2 : f2 * dado1
dobro = f (2)
quintuplo = f(5)
print (dobro(4))
print (quintuplo(4))
8
20
Figura 4.12: Exemplo de função lambda.
Fonte: O autor.
63
50
304140932017133780436126081660647688443776415689605120000000000
00
Figura 4.13: Exemplo de função lambda para cálculo de fatorial.
Fonte: O autor.
Nesta função fatorial(), a função lambda possui uma estrutura de decisão simples
para verificar a condição de parada necessária para sucessivas repetições da
função. Nela é colocada a condição de parada quando a variável i contadora
chegue a 1, caso contrário, a função chama a si mesma reduzindo uma unidade
na variável contadora antes de reutilizá-la como parâmetro.
Uma curiosidade é o uso do valor 50 como dado para servir de parâmetro para
a função de cálculo. Como a base da cálculo do fatorial são sucessivas
multiplicações, é possível perceber que a linguagem aceita trabalhar com valores
grandes como já citado.
64
Conclusão
65
UNIDADE V
Introdução
Antes de iniciar os estudos desta unidade final, foram vistos aspectos muito
importantes relativos à manipulação de arquivos de texto e de estruturas de
controle de decisão e repetição durante a execução de scripts.
Nesta unidade, são tratados conceitos ligados à orientação a objetos como sua
estrutura básica de classes, métodos e atributos, e conceitos complementares
como de uso da técnica de herança entre classes.
Bons estudos.
66
Orientação a Objetos
class Pessoa:
def __init__ (self, nome, idade):
self.nome = nome
self.idade = idade
Marcos
20
Figura 5.1: Exemplo de criação de classe e seu uso.
Fonte: O autor.
67
No exemplo da figura 5.1, é declarada uma classe Pessoa (é de boa praxe
utilizar a primeira letra maiúscula em classes) que em sua definição possui um
método __init__() obrigatório para declaração de atributos.
class Pessoa:
def __init__( self, nome, idade):
self.nome = nome
self.idade = idade
def f (self):
print ("Sr (a)", self.nome, "está com", self.idade, "anos.")
a = input()
b = input()
pessoa = Pessoa (a, b)
pessoa.f()
João
25
Sr (a) João está com 25 anos.
Figura 5.2: Exemplo de classe com função.
Fonte: O autor.
68
Neste exemplo da figura 5.2, é declarada uma função f dentro da classe Pessoa
que funciona como um método principal para manipular dados de atributos
chamado de __init__() onde são indicadas uma referência para estruturação da
classe instâncias de objetos e sua ligação com atributos da classe.
Por fim, a função f é invocada pelo objeto pessoa para que as funcionalidades
contidas nela sejam utilizadas, e neste caso específico, a string completa
contendo o texto e dados armazenados sejam compostos e exibidos ao usuário.
69
class Carro:
def __init__ (self, modelo, placa):
self.modeloCarro = modelo
self.placaCarro = placa
Fonte: O autor.
No exemplo apresentado na figura 5.3, uma classe Carro é definida pela palavra
reservada class. As definições da classe para instâncias de objetos são
definidas no método __init__ (obj) onde o termo self é colocado como primeiro
parâmetro para referências à classe e aos dois atributos modeloCarro e
70
placaCarro da classe que obtém seus dados através dos parâmetros de entrada
(ou mensagens como se costuma dizer em orientação a objetos) modelo e
placa.
Assim, quando um objeto for instanciado a partir da classe Carro, deverão ser
passados os dados para modeloCarro e placaCarro através de mensagens
contidas em modelo e placa na chamada do objeto.
Neste exemplo da figura 5.3, a classe Pendencias serve de base para instância
de objetos referentes à parte documental de veículos cadastrados em objetos
instanciados a partir da classe Carro, sendo que cada carro cadastrado, deve
ser adicionado a um objeto diferente que possui, pela herança, um objeto relativo
à sua documentação.
71
Um método mensagem (obj) é adicionado à classe Pendencias para exibir
justamente todos os dados relativos à união dos atributos da superclasse Carro
e da classe Pendencias instanciados em objetos.
Métodos Complementares
72
print (next (iterador2))
print (next (iterador2))
print (next (iterador2), "\n")
Elemento 1
Elemento 3
Elemento 3
I
n
f
Figura 5.4: Exemplos de uso do método iter() e next().
Fonte: O autor.
No primeiro exemplo da figura 5.4, são instanciados um objeto tupla1 com quatro
elementos e um objeto texto1 com uma string. Duas variáveis iterador1 e
iterador2 são instanciados com os métodos iter() sendo acionados para que o
processo de avanço nos elementos ou caracteres de cada objeto seja acessado.
Um detalhe é que no segundo objeto, como contém uma string como dados, o
avanço ocorre em um caractere por vez, e três funções print() são utilizadas,
apenas três caracteres da string são exibidos. Para melhorar esta situação,
observe o exemplo da figura 5.5.
class Contador:
def __iter__(self):
self.numero = 1
73
return self
def __next__(self):
if self.numero <= 5:
i = self.numero
self.numero += 1
return i
else:
raise StopIteration
obj = Contador()
iterador3 = iter(obj)
for i in iterador3:
print(i)
1
2
3
4
5
Figura 5.5: Exemplos de uso do método iter() e next().
Fonte: O autor.
74
Esse controle de incremento do valor do atributo numero é controlado por uma
estrutura de decisão if que possui uma exceção controlada pelo comando else
que encerra as iterações através do comando raise StopIteration, impedindo
que sejam realizadas iterações indefinidamente.
Módulos
Em Python, o nome dado a uma biblioteca é módulo, e arquivos deste tipo são
nomeados com a extensão “.py”. Observe o exemplo da figura 5.6 de como
implementar um módulo para linguagem Python.
#Arquivo modulo.py
def quadrado (valor):
print ("Quadrado de", valor, "é", int(valor) * int(valor))
75
def cubo (valor):
print ("Cubo de", valor, "é", int(valor) * int(valor) * int(valor))
#Arquivo calcula.py
import modulo
num = input()
modulo.quadrado (num)
modulo.cubo (num)
3
Quadrado de 3 é 9
Cubo de 3 é 27
Figura 5.6: Exemplo de uso de módulo e script em arquivos separados.
Fonte: O autor.
No exemplo da figura 5.6 é importante observar que são gerados dois arquivos
separados gravados com os nomes indicados nos comentários, por exemplo. O
nome do segundo arquivo pode ser modificado livremente, mas caso seja
desejada a alteração do nome do primeiro arquivo, é preciso observar que este
nome deve ser substituído na linha da instrução de vínculo de módulos usando
o comando import. Outro ponto é não se esquecer de manter a extensão “.py”
padrão da linguagem.
76
de seus cálculos, e basicamente, cada função apenas possui a funcionalidade
de exibir uma mensagem com o resultado do cálculo respectivo de cada função.
#Arquivo registros.py
dados1 = {
"nome": "João",
"fone": "98659-1200"
}
dados2 = {
"nome": "Marcos",
"fone": "98563-8989"
}
#Arquivo consulta.py
import registros
João - 98659-1200
Figura 5.7: Exemplo de uso de módulo e script em arquivos separados.
Fonte: O autor.
77
arquivo registros.py que podem ser utilizados como registros para consulta e
manipulação utilizando os recursos vistos de manipulação de arquivos de texto
e estruturas de dados.
Outro módulo que pode padrão que pode ser utilizado livremente é chamado
JSON que pode ser utilizado para ler e converter dados em padrão Python para
Javascript ou vice-versa. Nesta conversão, dicionários Python são convertidos
para objetos Javascript ou tipos Python (str e int, por exemplo) em Javascript
(String e Number respectivamente).
78
Figura 5.8: Exemplo de instalação do pacote mysql.connector.
Fonte: O autor.
Um exemplo de uso é ilustrado na figura 5.9 que traz a simulação de acesso aos
dados de um banco de dados fictício já criado e contendo dados para uma
consulta a ser executada utilizando o comando SQL SELECT.
import mysql.connector
bancoCadastro = mysql.connector.connect (
host = "localhost",
user = "usuarioX",
passwd = "senhaX",
database = "cadastro"
)
79
base = bancoCadastro.cursor ()
base.execute ("SELECT * FROM PESSOA")
resultado = base.fetchall ()
print (“Listagem de todos os registros da tabela PESSOA”)
for i in resultado:
print (i)
Fonte: O autor.
import pymongo
80
cliente = pymongo.MongoClient ("mongodb://localhost:99999/")
banco = cliente ["BASEDADOS"]
coluna = banco ["PESSOA"]
Fonte: O autor.
81
Conclusão
82