Você está na página 1de 61

Introdução à Programação Usando Python

Marco Dias

Fundação Florestan Fernandes e Unifesp

30 de setembro de 2020

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 1 / 61
Instalação

Instalação no Windows
Neste curso iremos trabalhar com a versão do Python 3.6 cujo link para
download é: https://www.python.org/downloads
No próprio site aparece ”Download the Latest Source Release”para baixar.
Durante a instalação, selecionem Install for all users quando aparecer a janela
com esta pergunta e o resto é tudo default, deixando como está.

Para verificar se está tudo ok depois de instalado o Python, acessem no menu


do Windows, Iniciar→ Programas→Python 3.4 e escolham IDLE. Aı́ é
possı́vel escrever na janela que deve aparecer, como teste, a seguinte linha:

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 2 / 61
Instalação

Instalação no Windows

print("Hello")

Ao teclar Enter a magia deve acontecer (ou seja, ele vai responder com um
Hello).
Iremos verificar se a IDE está OK e podemos salvar nossos programas. Para
isto, ainda no IDLE, olhando no menu podemos selecionar File → New File.
Uma nova janela deve aparecer e alı́ que iremos trabalhar nossos programas.
Se vocês escreverem o mesmo print("Hello") que foi usado no teste
anterior e salvarem File→Save o arquivo como teste.py, será possı́vel,
ainda na IDE selecionar Run→Run Module e o programa será executado em
outra janela, a do interpretador.
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 3 / 61
Instalação

Instalação no Windows

Troque a última linha por


print("Al^
o Mundo!")
%
Para fechar um console podemos usar as instruções quit() ou exit()

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 4 / 61
Instalação

Primeiros passos
Podemos usar o Python como uma calculadora. Tanto no uso interativo o
interpretador espera um comando por linha. Dois comandos por linha podem
ser inseridos usando ;, assim como usar expressões que continuam em outras
linhas, quebrando estas com o\.
>>> 1+1
2
>>># Podemos incluir comentários nos nossos programas
>>> 2*6
12
>>> 7/3.
2.333333333335
>>> 2**3
8
Observe o seguinte código:
>>> 7%(5//2)
Qual o resultado desta operação?

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 5 / 61
Instalação

Primeiros passos
O operador módulo (//) nos fornece em 5//2 o resultado 2, pois nos dá
quantas vezes o 2 ”cabe”no 5. O resto da divisão, é dado pelo operador %,
no caso 7%2 tem resto 1.

Exercı́cio
Converta as seguintes expressões matemáticas para serem calculadas usando o
interpretador
10 + 20 × 30
42
30
(94 + 2) × 6 − 1

Exercı́cio
Calcule a seguinte expressão com lapis e papel e observe a prioridade de operações
10 % 3*10**2+1-10*4/2
comparando com o resultado do interpretador.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 6 / 61
Instalação

Primeiros passos

Podemos nos nossos programas atribuir valores à variáveis usando o sinal de


igual
>>> largura = 20
>>> altura = 7*3
>>> largura * altura
>>> x = y = z = 2
>>> x
>>> y
>>> z
>>> a,b,c =1,3,4
>>> a
>>> b
>>> c
>>> print (a+c)

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 7 / 61
Instalação

Primeiros passos
Exercı́cio
Complete o programa que declara uma variável numérica, adiciona 5 e depois
mostra o seu valor:

>>> x=___
>>> x__=5
>>>print___

No Python existem palavras reservadas as quais não podem ser usadas para
nomear variáveis. São elas and,as, assert, break, class, continue
, def, del, elif, else, except, exec,
finally, for, from, global, if, import, in, is, lambda,
not, or, pass, print, raise, return, try, while e yeld.
Também não é permitido que uma variável comece seu nome com um
número.
O Python ainda é case sensitive, ou seja ele diferencia variáveis com
minúsculas ou maiúsculas, logo a e A são variáveis diferentes para o
interpretador. Sempre que ele não encontra a variável temos o seguinte erro:
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 8 / 61
Instalação

Primeiros passos

>>> errado
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name ’errado’ is not defined

Você pode usar del para remover uma variável e poder usá-la novamente, ser
for necessário.
>>> foo=’minha variável’
>>> foo
>>> del foo
>>> foo
>>> foo=7
>>> foo
>>> foo+=3
>>> foo

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 9 / 61
Instalação

Primeiros passos

Exercı́cio
Faça um programa que exiba seu nome na tela.

Exercı́cio
Escreva um programa que exiba o resultado de 2a × 3b onde a = 3 e b = 5

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 10 / 61
Instalação

Estrutura de dados

Sobre a estrutura dos dados, o Python oferece a flexibilidade das estruturas


como listas, tuplas e dicionários . Sobre as listas, vejamos alguns
exemplos:
>>>lista=[1,’ant^
onio silvério’, 1.3,’Júlio’,4/3] #criando uma li
>>>lista[0]
>>>lista[2]
>>>lista[-1] #acessando o último elemento da lista
>>>lista[0:2] #fatiando uma lista
>>>lista[2:]
>>>a=lista[:] #acessando todos os elementos de uma lista
>>>a
>>>a.append(’Luna’)
>>>a.insert(3,["Júpiter","Cláudio"])
>>>a[3]
>>> a[3][1]

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 11 / 61
Instalação

Estrutura de dados
Temos os seguintes métodos para listas

Método Função
a.append(element) adiciona o elemento no final da lista.
a.count(elemento) Retorna a quantidade do elemento na lista.
a.extend(listb) Concatena listas.
a.index(elemento) Retorna o ı́ndice da primeira ocorrência do element
a.insert(i,elemento) Insere o elemento antes do ı́ndice i.
a.pop(i) remove e retorna o objeto no ı́ndice ou o último ele
a.remove(elemento) Remove a primeira ocorrência do elemento.
a.reverse() Inverte a lista.
a.sort() Ordena a lista.
Tabela: Métodos de listas

Vejamos alguns exemplos:


>>>lista1=[1,2,3]
>>>lista2=[’a’, ’b’,’c’]
>>>lista1.extend(lista2)
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 12 / 61
Instalação

Estrutura de dados

>>>lista1.extend(lista2) #para termos duas ocorr^


encias de alguns ele
>>>lista1.index(’a’)
>>>lista1.remove(’b’)
>>>lista1.pop(6)
>>>lista_nova=lista1+[’Jet’,’Gerome’]
>>>lista_nova*2

Diferente de uma lista, uma tupla não pode ser alterada.


>>>alunos=(’Jorge’,’Alfred’,’Jon’,’Cloe’,’Susy’,’Camille’)
>>>len(alunos)
6
>>>alunos[2]
>>>alunos[1:3]
>>>alunos=’Harold’, #Uma tupla com um único elemento. Repare na
>>>alunos=(’Harold’,) #mesma coisa que a anterior

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 13 / 61
Instalação

Estrutura de dados
Outro tipo de sequência em Python são as strings, que podem estar
delimitadas por aspas simples ou duplas
>>> pig=’Peppa’
>>> len(pig)
5
>>> pig[1]
>>> poema=’Batatinha quando nasce \n espalha a rama pelo ch~
ao.\n
>>> print(poema)
Batatinha quando nasce
espalha a rama pelo ch~ ao.
Menininha quando dorme
p~oe a m~
ao no coraç~
ao.
>>> poema="""Batatinha quando nasce
espalha a rama pelo ch~ ao.
Menininha quando dorme
p~oe a m~
ao no coraç~
ao.""" #também funciona com ’’’

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 14 / 61
Instalação

Estrutura de dados

>>> x=’7’
>>> print(3*x) # x é uma string, portanto o resultado é 777
>>> print(x+’0’)

Em Python, a inserção de strings envolve os operadores %s. Se tivemos que


inserir um inteiro é %d e um número decimal %f
nome="Neymar"
idade=24
money=51.23456
print("%s tem %d anos e R$%f na conta bancária."
... %(nome, idade,money))
print("%s tem %d anos e R$%5.2f na conta bancária."
... %(nome, idade,money))
% Queremos imprimir money com 5 posiç~
oes,
%onde dessas 5 teremos duas casas decimais

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 15 / 61
Instalação

Estrutura de dados

Os dicionários agem como um banco de dados que possui um estrutura de


pares do tipo chave:valor. Por exemplo
>>> english_to_portuguese={’house’:’casa’,’pig’:’porco’,
...’wolf’:’lobo’, ’three’:’tr^
es’}
>>> english_to_portuguese[’house’]
’casa’
>>> english_to_portuguese.keys()
#retorna as chaves contidas no dicionário
dict_keys([’pig’, ’house’, ’three’, ’wolf’])
>>> english_to_portuguese[’brick’]=’tijolo’
#podemos adicionar mais palavras ao dicionário
>>> english_to_portuguese.items()
dict_items([(’brick’, ’tijolo’), (’pig’, ’porco’),
... (’house’, ’casa’), (’three’, ’tr^
es’), (’wolf’, ’lobo’)])

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 16 / 61
Instalação

Estrutura de dados

>>> english_to_portuguese.values()
dict_values([’tijolo’, ’porco’, ’casa’, ’tr^es’, ’lobo’])
>>> del(english_to_portuguese[’pig’])
>>> print(english_to_portuguese)
{’brick’: ’tijolo’, ’house’: ’casa’, ’three’: ’tr^es’, ’wolf’: ’lobo’
>>>print( "wolf" in english_to_portuguese )

Método Função
a.clear() Remove todos os itens do dicionário.
a.copy() Cria uma cópia de um dicionário.
a.update(b) Copia itens de b para a.
a.get(k,d) Retorna a[k] se a chave k existir, senão d (opcional) .
a.popitem() Remove o último valor e o retorna.
Tabela: Métodos de dicionários

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 17 / 61
Instalação

Estrutura de dados
Alguns exemplos
>>> eng2pt=english_to_portuguese.copy()
>>> print(eng2pt)
{’brick’: ’tijolo’, ’house’: ’casa’, ’three’: ’tr^es’, ’wolf’: ’lobo’
>>> eng2pt.clear()
>>> eng2pt.update(english_to_portuguese)
>>> print(eng2pt)
{’brick’: ’tijolo’, ’house’: ’casa’, ’three’: ’tr^es’, ’wolf’: ’lobo’
>>> eng2pt.get(’wolf’,’three’)
’lobo’
>>> eng2pt.get(’mouse’,’three’)
’tr^
es’
>>> eng2pt.popitem()
(’brick’, ’tijolo’)
>>> print(eng2pt)
{’house’: ’casa’, ’three’: ’tr^es’, ’wolf’: ’lobo’}

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 18 / 61
Instalação

Estrutura de dados

Exercı́cio
Crie um programa que mostre a quantidade de peças de uma oficina mecânica em
um estoque usando um dicionário e também o preço unitário da peça, usando
outro dicionário.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 19 / 61
Instalação

Entrada de dados
Iremos trabalhar agora com a entrada de dados feita pelo usuário
>>>x= input("Digite um número:")
>>>print(x)
>>>nome=input("Digite o seu nome: ")
>>>print("Boa noite %s, como voc^ e está?" % nome)
Os dados de entrada são tratados como uma string. Se quisermos fazer
uma operação matemática com eles, temos que proceder com uma conversão
para int ou mesmo float
>>> anos= input("Digite sua idade:")
Digite sua idade:18
>>> type(anos)
<class ’str’>
>>> print("Em 2021 voc^ e terá %s" %anos+5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can’t convert ’int’ object to str implicitly
>>> print("Em 2021 voc^ e terá %s" % (int(anos)+5))
Em 2021 voc^ e terá 23
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 20 / 61
Instalação

Entrada de dados
Exercı́cio
Qual deve ser a saı́da deste programa?
>>>word=input("Entre uma palavra: ")
Entre uma palavra: teste
>>>print(word+’ completo’)

Exercı́cio
Faça um programa que peça dois números inteiros ao usuário e imprima a soma
desses dois números na tela.

Exercı́cio
Escreva um programa que converta a temperatura digitada em ◦ C em ◦ F , usando
a fórmula
9×C
F = + 32
5

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 21 / 61
Controle de Fluxo

Variáveis do tipo lógico e comparações


As variáveis do tipo lógico são do tipo true ou false
>>>a=5
>>>b=12
>>>a==b #a é igual a b?
>>>b!=a # b é diferente de a?
>>>b>a # b é maior que a?
>>>b>= a # b é maior ou igual a a?
>>>b <= a # b é menor ou igual a a?
>>>"hello"=="oi"
Podemos fazer operações lógicas com estas variáveis:
>>>a=5
>>>b=6
>>>a==5 and b==6 # O and resulta em True se ambos os valores foram t
True
>>>a==5 and b<3
False
>>>a==4 and b<3
False
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 22 / 61
Controle de Fluxo

Variáveis do tipo lógico e comparações


>>>a==4 or b==6 #O operador or resulta em True
se ao menos uma das condiç~
oes for verdadeira
True
>>>a==4 or b!=6
False
>>> teste="hello"=="oi"
>>> teste
False
>>> not teste #O not retorna o inverso da condiç~
ao
True

Vamos ver agora uma estrutura condicional, o if


if 10 >5:
print("10 é maior que 5")
print("Fim do programa")
ou ainda, usando o else

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 23 / 61
Controle de Fluxo

Controle de Fluxo
idade=int(input("Digite a idade do seu carro: "))
if idade <=3:
print("Parabéns seu carro é novo!")
else:
print("Por que n~ao trocar de carro?")
O Python usa um espaço em branco no começo da linha para delimitar um bloco
de código obrigatóriamente.

Exercı́cio
Qual é a saı́da deste programa?
if num >3:
print("maior que 3")
if num < 5:
print("menor que 5")
if num==7:
print("igual a 7")

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 24 / 61
Controle de Fluxo

Controle de Fluxo
Podemos usar ainda if, elif e else. O elif substitui uma estrutura com
else:if aninhado:
if num==1:
#Esse bloco é executado se num for igual a 1
print("num é igual a um")
elif num==2:
#agora este bloco é executado se num for igual a 2
pass #essa instruç~
ao simplesmente deixa o fluxo continuar
else:
#Se nenhuma das condiç~
oes anteriores foi implementada temos a execuç
print(’num é maior que 2’)

Exercı́cio
Escreva um programa que pergunte a velocidade do carro de um usuário. Caso
ultrapasse 80 km/h, exiba uma mensagem dizendo que usuário foi multado. Nesse
caso exiba o valor da multa também, cobrando R$ 5 por km/h acima de 80 km/h.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 25 / 61
Controle de Fluxo

Controle de Fluxo

Ao implementar um programa que utiliza operações lógicas em um if temos que


ter cuidado com a procedência dos operadores. Vejamos um exemplo: o operador
== tem prioridade sobre os operadores lógicos
>>> False==False or True
True
>>> False==(False or True)
False
>>> (False==False) or True
True
>>> a,b=5,3
>>> 0 <a<b #avaliaç~
ao é feita da esquerda
False
>>> 0<a>b # para a direita
True

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 26 / 61
Controle de Fluxo

Controle de Fluxo
Podemos usar o programa no interpretador diretamente usando
>>> a=5;b=8
>>> if a>b:
... print("a é maior que b")
... c="maior"
... elif a==b:
... print("a é igual a b")
... c="igual"
... else:
... print("a é menor do que b")
... c="menor"
...
a é menor do que b
>>> print(a,c,b)
5 menor 8

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 27 / 61
Controle de Fluxo

Controle de Fluxo

Exercı́cio
Escreva um programa que calcule o preço a pagar pelo fornecimento de energia
elétrica. Pergunte a quantidade em kWh consumida e o tipo de instalação: R para
residências, I para industrias e C para comércios. Calcule o preco a pagar de
acordo com a seguinte tabela:
Tipo Faixa (kWh) Preço
Residêncial até 500 R$ 0,40
Acima de 500 R$ 0,65
Comercial Até 1000 R$ 0,55
Acima de 1000 R$ 0,60
Industrial Até 5000 R$ 0,55
Acima de 5000 R$ 0,60

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 28 / 61
Controle de Fluxo

Estruturas de repetição
O laço while repete uma tarefa enquanto uma condição for verdadeira:
#Usando o laço while
i=0
while i<10:
i+=1
print(i)
#Usando o laço for
for i in range(1,10,2):
print(i)
O range cria um iterador e aceita os seguintes argumentos: inı́cio, fim e
passo, respectivamente. Podemos criar uma lista com
list(range(0,10,2))
O laço for nos permite iterar sobre uma sequência atribuindo os elementos
da mesma a uma variável, sequencialmente à medida que prossegue.

Exercı́cio
Faça um programa que escreva a contagem regressiva do lançamento de um
foguete. O programa deve imprimir 10, 9,8,..,1,0, Ignição! na tela
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 29 / 61
Controle de Fluxo

Estruturas de repetição
Podemos iterar sobre a lista e seu ı́ndice, usando o enumerate
>>> list=[’Jorge’,’Mauricio’, ’Flávio’,’Matheus’, ’Marcio’]
>>> for n,e in enumerate(list):
... print("%s: %s" %(n,e))
...
0: Jorge
1: Mauricio
2: Flávio
3: Matheus
4: Marcio
Usando o zip podemos iterar em duas listas:
>>> list2=[’professor’,’funcionário’,’aluno’,’tutor’,’coordenado
>>> for p,r in zip(list2,list):
... print("Quem é o %s?%s" %(p,r))
Quem é o professor?Jorge
Quem é o funcionário?Mauricio
Quem é o aluno?Flávio
Quem é o tutor?Matheus
Quem é o coordenador?Marcio
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 30 / 61
Controle de Fluxo

Estruturas de repetição
Podemos iterar sobre uma sequência ordenada ou na ordem reversa
>>> supermercado=[’macarr~
ao’,’arroz’,’ovo’,’frango’]
>>> for i in sorted(supermercado):
... print(i)
...
arroz
frango
macarr~ao
ovo
>>> for i in reversed(range(5)):
... print(i)
...
4
3
2
1
0

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 31 / 61
Controle de Fluxo

Estruturas de repetição

Podemos usar o break para finalizar uma iteração (ou continue para
continuar...)
>>> i=9
>>> for i in reversed(range(10)):
>>> while True:
... if(i>5):
... if(i>5):
... print(i)
... print(i)
... else:
... i=i-1
... break
... else:
...
... break
Um outro tipo de problema
#Imprimindo a tabuada dada pelo usuário
n=int(input("Tabuada do:"))
x=1
while(x<=10):
print("%s vezes %s =%s" %(n,x,n*x))
x=x+1

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 32 / 61
Controle de Fluxo

Estruturas de repetição
Exercı́cio
Refaça o programa anterior usando o for

Exercı́cio
Modifique o programa anterior de forma que o usuário também consiga digitar o
inı́cio e o fim da tabuada, em vez de começar de 0 até 10.

Observe o seguinte programa que usa um acumulador, soma


x=1
soma=0
while(x<=5):
n=int(input("Digite o número n%d: " %x))
soma=soma+n
x=x+1
print("Média: %5.2f" % (soma/5))
Veja que ele calcula a média
n1 + n2 + n3 + n4 + n5
média =
5
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 33 / 61
Controle de Fluxo

Estruturas de repetição

Exercı́cio
Escreva um programa que pergunte o valor inicial de uma dı́vida e o juro mensal.
Pergunte também o valor mensal que será pago. Imprima o número de meses para
que a dı́vida seja paga, o total pago e o total de juros pago.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 34 / 61
Controle de Fluxo

Estruturas de repetição

Podemos usar estruturas com for aninhados, por exemplo


elefantinho=[’um elefante ’,’incomoda ’, ’muita gente’]
for i in elefantinho:
print(i)
for j in elefantinho:
print(j)
e compare com
elefantinho=[’um elefante ’,’incomoda ’, ’muita gente’]
for i in elefantinho:
for j in i:
print(j)

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 35 / 61
Controle de Fluxo

Funções
Um exemplo de definição de uma função e pré-atribuição de valores nela:
def fun(a,b=1):
print(a,b)
fun(2)
fun(2,3)
Em python podemos ter um número variável de argumentos precedidos por *
ou **; argumentos passados anoninamente são guardados em uma tupla
enquanto os nominais são armazenados em um dicionário.
def fun2(*t,**d):
print(t,d)
fun2(1,2,c=3,q=’adsd’)
Funções podem retornar valores usando a palavra reservada return
>>> def soma(a,b):
... return a+b
... #digite enter novamente!
>>> soma(3,4)

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 36 / 61
Controle de Fluxo

Funções

Exercı́cio
Escreva uma função que retorne o maior de dois números.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 37 / 61
Controle de Fluxo

Funções

Um problema clássico de programação é o do cálculo de um fatorial, uma


função recursiva, que chama ela mesma:
def fatorial(n):
if n==0 or n==1:
return 1
else:
return n*fatorial(n-1)
Podemos ainda definir pequenas funções de uma única linha anônimamente:
raiz= lambda x,n: x**(1./n)
print(raiz(16,4))

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 38 / 61
Controle de Fluxo

Funções
Em funções podemos ter variáveis locais, que existe apenas dentro delas e
cujos valores não podem ser acessados fora dela, como também variáveis
globais. No entanto devemos ter cuidado ao modificar variáveis globais. Por
exemplo
a=5 #Variável global
def muda_e_imprime():
a=7 #Tentaremos mudar o valor de a
print("a dentro da funç~ ao:%d" %a)
agora no interpretador avalie o valor de a antes e depois de usar a função
muda_e_imprime(). Viu que não mudou?
Façamos a seguinte modificação:
a=5 #Variável global
def muda_e_imprime():
global a
a=7 #Tentaremos mudar o valor de a
print("a dentro da funç~ ao:%d" %a)

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 39 / 61
Controle de Fluxo

Funções
Vejamos agora a seguinte função:
def soma(L):
total=0
x=0
while x<5:
total+=L[x]
x+=1
return total
Use print(soma(L)) para mostrar a soma de uma lista. Faça isso para as
seguintes listas
L=[1,2,2,4,5]
L=[1,2]
L=[1,8,2,3,5,6,9,10]

Exercı́cio
Reescreva o programa de forma a utilizar o for ao invés do while

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 40 / 61
Controle de Fluxo

Lidando com erros


Muitas vezes teremos de lidar com erros que ocorrem durante a execução de
programas sintaticamente corretos. Estes erros são denominados exceç~
oes
>>> 1./0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
Usando try:..except: podemos fazer um programa mais robusto, que
responda as chamadas built-in exceptions (não precisamos sabê-las de cor,
basta causar o erro e anotar o seu nome!)
x=int(input("Digite um número: "))
for i in range(5):
try:
q=i/x
print(q)
except ZeroDivisionError:
print("Divis~ ao por zero!")

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 41 / 61
Controle de Fluxo

Lidando com erros

Por vezes temos que lidar com mais de um erro:


s="ABCDEFGHIJ"
try:
x=int(input("Digite um número entre 0 e 9 (inclusive): "))
print(s[x])
except ValueError: #digitou algo que n~ ao é um número
print("Voc^ e tem que digitar um número!")
except IndexError: #digitou algo maior que 9
print("O número n~ ao pode ser maior que 9! ")

Exercı́cio
Crie um programa onde seja solicitado ao usuário o nome, a idade e a profissão.
Após o usuário entrar com os dados , seja impresso na tela as informações deste
usuário. Use try para tratar possı́veis erros.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 42 / 61
Controle de Fluxo

Lidando com erros

Usamos a cláusula else: para inserir um pedaço de código que será


executado se nenhuma exceção ocorrer:
s="ABCDEFGHIJ"
while True:
try:
x=int(input("Digite um número entre 0 e 9 (inclusive): "))
print(s[x])
except ValueError:
print("Voc^ e tem que digitar um número!")
print("Tente novamente!")
except IndexError:
print("O número n~ ao pode ser maior que 9! ")
else:
break #Saio do loop se tudo estiver OK

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 43 / 61
Controle de Fluxo

Lidando com erros

A cláusula finally pode ser usada para se assegurar que mesmo que ocorra
algum erro, uma determinada seqüência de comandos vai ser executada
try:
x=int(input("Entre com um número:" ))
except:
print("Deu Bode!")
finally:
print("Dando um valor para x") #executado de qualquer forma,
x=2 #mesmo que n~ ao tenha erro!
print(x)

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 44 / 61
Controle de Fluxo

Lidando com erros

Podemos usar as exceções em funções, por exemplo


def pesquisa(chave,dicionario):
try:
return dicionario[chave]
except KeyError:
print(" N~ao existe a peça %s no estoque" %chave)
return None
estoque={’c^ambio’:3,’rodas’:8,’longarina’:6}
print(pesquisa(’rodas’,estoque))
print(pesquisa(’elefante’,estoque))

Exercı́cio
Escreva um programa que pesquise um determinado valor em uma lista, usando
lista.index(elemento) e a exceção ValueError.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 45 / 61
Controle de Fluxo

Trabalhando com arquivos


Modo Operações
r Leitura
w Escrita, apaga o conteúdo que já existe
a Escrita, mas preserva o conteúdo
b Modo binário
+ Atualização (leitura e escrita)
Tabela: Modos de abertura de arquivos

Os modos acima podem ser combinados,ex: ”r+b”


Para escrever em um arquivo podemos fazer, por exemplo:
arquivo=open("arquivo.txt","w")
for linha in range(1,101):
arquivo.write("Esta é a linha %d \n" % linha)
arquivo.close()
Para ler em um arquivo podemos
>>>arquivo=open("arquivo.txt","r")
>>>for linha in arquivo.readlines():
>>> print(linha) #O output sai depois do enter
>>>arquivo.close()
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 46 / 61
Controle de Fluxo

Trabalhando com arquivos


No próximo exercı́cio teremos de usar a linha de comando para passar
parâmetros ao programa. No Windows, é necessário
1 Por exemplo, crie um programa com a linha print("alo mundo");
2 Salvar o programa na pasta C:\Users\<usuário>\exemplo;
3 Abrir o Command Prompt (em ”Iniciar - Sistemas do Windows - Prompt”);
4 cd C:\Users\<usuário>\exemplo
5 Como o Python não está no PATH é necessário dar seu caminho completo para
rodar o programa:C:\Python34\python.exe alomundo.py
Sabendo disso, podemos usar o módulo sys e trabalhar com a lista argv:
import sys #importamos o módulo sys, que cria a lista argv
print("Número de par^ ametros:%d" % len(sys.argv))
for n,p in enumerate(sys.argv): #iremos iterar sobre esta lista
print("Par^ ametro %d = %s" %(n,p))
Rode usando
C:\Python34\python.exe programa.py "argumento1" "argumento2"
Exercı́cio
Escreva um programa que receba o nome de um arquivo pela linha de comando e
que imprima todas a linhas deste arquivo.
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 47 / 61
Controle de Fluxo

Trabalhando com arquivos


Veja o seguinte exemplo, que cria uma página em HTML:
pagina=open("pagina.html","w",encoding="utf-8")
pagina.write("""
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>Tı́tulo da Página</title>
</head>
<body>
Olá!
""")
for i in range(10):
pagina.write("<p>%d</p>\n" %i)
pagina.write("""
</body>
</html>
""")
pagina.close()
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 48 / 61
Controle de Fluxo

Conceitos de Classes e Objetos


A programação orientada ao objeto visa organizar os programas em classes e
objetos ao invés de funções. Veja o seguinte exemplo:
>>> class Ret^ angulo:
... def __init__(self,largura,altura):
... self.area=largura*altura
... self.perimetro=2*largura+2*altura
...
>>> ret=Ret^ angulo(2,3)
>>> ret.area
6
>>> ret.perimetro
10
O método __init__ é um construtor da classe. Observe o parâmetro self,
que é o próprio objeto em sı́.

Exercı́cio
Crie uma classe Conta que tenha como atributos saldo,número e clientes, o
último uma lista no caso de conta conjunta.
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 49 / 61
Controle de Fluxo

Conceitos de Classes e Objetos


No exemplo a seguir definimos a classe Complex e três métodos
class Complex(object):
def __init__(self, real, imag):
self.real = real
self.imag = imag
def getReal(self):
return self.real
def getImag(self):
return self.imag
def getR(self):
return math.sqrt(self.real * self.real +
self.imag * self.imag)
Depois de definida a classe use
import math
r=Complex(1,2)
print(r.getR())

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 50 / 61
Controle de Fluxo

Conceitos de Classes e Objetos


Exercı́cio
Na classe Conta do exercı́cio anterior, implemente três métodos: saque, extrato
e depósito. Assuma que esta conta não tem limite especial.

Iremos agora apresentar o conceito de classe derivada ou herança;


basicamente iremos adicionar ou substituir atributos da classe base para uma
nova classe derivada. Veja o seguinte exemplo: lembra-se da classe
Ret^angulo?
Use a IDLE para implementar a classe e salve como retangulo.py no
diretório C:\Python34
Agora é possı́vel importar a sua classe com
from retangulo import Ret^ angulo
Agora, no interpretador
>>>from retangulo import Ret^ angulo
>>>class Quadrado(Ret^ angulo):
... def __init__(self,lado=0):
... Ret^angulo.__init__(self,lado,lado)
... self.lado=lado
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 51 / 61
Controle de Fluxo

Conceitos de Classes e Objetos

Veja que na segunda linha chamamos o método __init__ de Ret^


angulo
escrevendo Ret^angulo.__init__

Exercı́cio
Implemente a classe ContaEspecial, a qual herda os atributos e métodos
anteriores e tem um atributo a mais, limite. Com isso você vai ter que redefinir
o atributo saque

Exercı́cio
Altere a classe ContaEspecial de forma que seu extrato exiba o limite e o total
disponı́vel para saque.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 52 / 61
Controle de Fluxo

Banco de Dados

Vamos criar um banco de dados, uma tabela e um registro usando o SQlite


>>> import sqlite3
>>> conexao=sqlite3.connect("agenda.db")
>>> cursor=conexao.cursor()
>>> cursor.execute(’’’create table agenda(nome text,
telefone text)’’’)
>>> cursor.execute(’’’insert into agenda(nome,telefone)
values(?,?) ’’’,("nilo","777788"))
>>> conexao.commit()
>>> cursor.close()
>>> conexao.close()
Os valores que vamos inserir são especificados em values(?,?) onde cada
interrogação é um campo , no caso nome e telefone.

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 53 / 61
Controle de Fluxo

Banco de Dados

Vejamos como ler o que gravamos no banco de dados


>>> conexao=sqlite3.connect("agenda.db")
>>> cursor=conexao.cursor()
>>> cursor.execute("select * from agenda")
>>> resultado=cursor.fetchone()
>>> print("Nome: s \nTelefone:s" %(resultado))
>>> cursor.close()
>>> conexao.close()

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 54 / 61
Controle de Fluxo

Banco de Dados
Podemos alterar a entrada
import sqlite3
conex~
ao=sqlite3.connect("agenda.db")
cursor=conex~ ao.cursor()
cursor.execute(""" update agenda
set telefone=’1234-456’
where nome=’nilo’""")
conex~
ao.commit()
conex~
ao.close()
e finalmente remover esta entrada
import sqlite3
conex~ ao=sqlite3.connect("agenda.db")
cursor=conex~ ao.cursor()
cursor.execute(""" delete from agenda
where nome=’nilo’""")
conex~ ao.commit()
conex~ ao.close()

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 55 / 61
Controle de Fluxo

Banco de Dados

Multiplas entradas podem ser inseridas e vistas da seguinte forma


import sqlite3
dados=[("Vinı́cius","9978-3245"),("Paulo","3456-3456")]
conex~ao=sqlite3.connect("agenda.db")
cursor=conex~ ao.cursor()
cursor.executemany(""" insert into agenda (nome,telefone)
values(?,?)""",dados)
conex~ao.commit()
cursor.close()
conex~ao.close()
e, usando uma forma simplificada, sem criar o cursor podemos consultar
import sqlite3
with sqlite3.connect("agenda.db") as conex~ ao
for registro in conex~ ao.execute("select * from agenda"):
print("Nome:s\n Telefone:%s" %(registro))

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 56 / 61
Controle de Fluxo

Janelas
Criando uma aplicação simples usando o Tkinter
widget é um objeto visual: um botão, um menu, etc; Um clique de um
mouse é um evento. Assim event handler serve para tratar estes eventos.
frame é um contêiner no qual o widget está instalado. O frame primário é o
toplevel que é a janela que tem os botões de sair, minimizar, etc
No exemplo à seguir iremos criar uma janela (fr1) e um botão (botao). O
método pack é que torna estes elementos visı́veis.
from tkinter import *
class Janela:
def __init__(self,toplevel):
self.fr1 = Frame(toplevel)
self.fr1.pack()
self.botao = Button(self.fr1, text=’Oi!’, background=’green’)
self.botao.pack()

raiz=Tk()
Janela(raiz)
raiz.mainloop() #fica sempre aberta esperando um evento
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 57 / 61
Controle de Fluxo

Janelas
Iremos vamos relacionar o funcionamento do nosso botão com um evento (no
caso o click do botão esquerdo do mouse, <Button-1>, usando o bind() e
um método chamado, neste caso de muda_cor
from tkinter import *
class Janela:
def __init__(self,toplevel):
self.frame=Frame(toplevel)
self.frame.pack()
self.texto=Label(self.frame, text=’Clique para ficar amarelo’)
self.texto[’width’]=26
self.texto[’height’]=3
self.texto.pack()
self.botaoverde=Button(self.frame,text=’Clique’)
self.botaoverde[’background’]=’green’
self.botaoverde.bind("<Button-1>",self.muda_cor)
self.botaoverde.pack()
def muda_cor(self, event): # Muda a cor do botao!
if self.botaoverde[’bg’]==’green’:
self.botaoverde[’bg’]=’yellow’
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 58 / 61
Controle de Fluxo

Janelas

self.texto[’text’]=’Clique para ficar verde’


else:
self.botaoverde[’bg’]=’green’
self.texto[’text’]=’Clique para ficar amarelo’

raiz=Tk()
Janela(raiz)
raiz.mainloop()

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 59 / 61
Controle de Fluxo

Android e Kivy
Instale o VirtualBox :https://www.virtualbox.org/wiki/Downloads
Faça download da máquina virtual do Kivy em http://kivy.org/#download
Instale alguns pacotes como (dentro de um terminal da máquina virtual):
sudo apt-get install python-kivy
sudo apt-get install geany
a senha é kivy Crie o main.py (use o geany):
import kivy
kivy.require(’1.9.0’)
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.widget import Widget
class ShowImage(Image):
pass
class MyApp(App):
def build(self):
return ShowImage(source=’Minha_figura.jpg’,pos=(0,0),size=(5
if __name__ == ’__main__’:
MyApp().run()
No linux é possı́vel rodar o programa no terminal python main.py
Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 60 / 61
Controle de Fluxo

Android e Kivy

Faça o buildozer init e depois edite o buildozer.spec, deixando os padrões:


# (str) Title of your application
title = Teste Ambiente Virtual
# (str) Package name
package.name = testeVirtual
e rode buildozer -v android debug

Marco Dias ( Fundação Florestan Fernandes e Unifesp) Introdução à Programação Usando Python 30 de setembro de 2020 61 / 61

Você também pode gostar