Você está na página 1de 82

IEC081

- Introduo Cincia dos Computadores


IEC037 - Introduo Programao de
Computadores

Aula 03 Estruturas Condicionais Encadeadas








2016/1
Atualizado em 30/06/2016

Contedo
Como montar uma condio?
Estruturas Condicionais Encadeadas
Exemplos extras

Contedo
Como montar uma condio?
Estruturas Condicionais Encadeadas
Exemplos extras

Tipos de operadores
.

Operadores

Tipo

Operandos
(entradas)

Resultado
(sada)

AritmLco

numrico

numrico

Relacional

numrico

lgico

Lgico

lgico

lgico

Operadores Lgicos

Operadores lgicos (ou booleanos) so uLlizados


para a efetuar avaliaes entre valores lgicos
(Verdadeiro ou Falso).
Possui um

Operador Operao Exemplos


NO
E
OU

Negao

not (COR == azul)

Conjuno (ladoA == ladoB) and (ladoB == ladoC)


Disjuno

(ladoA == ladoB) or (ladoB == ladoC)


or (ladoA == ladoC)

nico
operando

Verica se
tringulo
equiltero
Verica se
tringulo
issceles

Operadores Lgicos
:: Tabelas Verdade

Conjunto de todas as possibilidades de resultados


de cada operador lgico.

A NO (A)

A B (A) E (B)

A B (A) OU (B)

Precedncia entre operadores


Operador

Signicado

()

Grupos entre parnteses

**

Potenciao

MulLplicao, diviso real,


resto, diviso inteira

* / % //

Subtrao, adio

+ >=

<

Negao

>

Precedncia

<=

==

Comparaes

not

NO lgico

and

E lgico

or

OU lgico

Atribuio

Exemplos
(x <= 20 or x >= 40)

x
10
20
30
40
50

resultado
V
V
F
V
V

(salario > 1000 and


idade > 18)

salario idade resultado


900
18
F
1000
19
F
F
1100
17
V
1200
22

Exemplos
(m 4 > m / 2)

m
2
8
30

resultado
F
F
V

(num % 2 != 0 and
contador < 50)

num contador
1231
51
1232
50
1233
49
1234
48

resultado
F
F
V
F

Ateno
:: Compare variveis do mesmo Lpo
x = 4
if ("4" == x):
print("igual")
else:
print("diferente")

No exemplo acima, a varivel x do Lpo inteiro,


mas a expresso "4" representa um caractere, e
no um nmero.

Armadilhas
:: Nmeros oat so aproximaes

H innitos nmeros
reais.
A memria do
computador um
recurso nito.
Logo, no h como
representar todos os
nmeros reais em
memria.
Consequentemente,
representamos
aproximaes.

u =

11111113

v = -11111111
w = 7.51111111
print((u + v) + w)

9.51111111
print(u + (v + w))

9.511111110448837
u + (v + w) == (u + v) + w

False

Estabelea um nvel mnimo de


preciso
AlternaFva 1

AlternaFva 2

u
v
w
x
y

u
v
w
x
y

=
=
=
=
=

11111113
-11111111
7.51111111
(u + v) + w
u + (v + w)

x == y

False
round(x,6) == round(y,6)

True

=
=
=
=
=

11111113
-11111111
7.51111111
(u + v) + w
u + (v + w)

x == y

False
abs(x-y) < 0.0000001

True

Funes round e abs


round(x, n)

Arredonda um
nmero x em n casas
decimais.

abs(z)

Determina o mdulo
de um nmero real z,
ou seja, sua distncia
at o zero.

Problema 1

Dados trs valores X, Y e Z, verique:


Se eles podem ser os comprimentos dos lados de um

tringulo.
Caso posiLvo, se o tringulo equiltero, issceles ou
escaleno.

Problema 1
1 IdenLcar o problema

Propriedade bsica de um tringulo:


O comprimento de cada lado de um tringulo menor

do que a soma dos comprimentos dos demais lados.


Equiltero

Issceles

Escaleno

Tringulo cujos
lados tm
comprimentos
iguais.

Tringulo que
tem dois lados
com
comprimentos
iguais.

Tringulo que
tem os trs
lados com
comprimentos
diferentes.

Problema 1
2 Denir entradas e sadas

Entradas

Sadas
Sadas

Grandeza

Unidade de medida

Faixa de valores

> 0

> 0

> 0

---

No tringulo,
Tringulo equiltero,
Tringulo issceles,
Tringulo escaleno

mensagem

Problema 1
3 Projetar algoritmo
incio
X, Y, Z
C1
V

F
C2

V
No
tringulo

C3

Equiltero

C1

(X >= Y + Z) or (Y >= Z +
X) or (Z >= X + Y)

C2

(X == Y) and (Y == Z)

C3

(X == Y) or (Y == Z) or
(Z == X)

V
Issceles"

Escaleno

Problema 1
4 Codicar em Python
#
X
Y
Z

Entrada de dados
= float(input("Digite o lado X: "))
= float(input("Digite o lado Y: "))
= float(input("Digite o lado Z: "))

if ((X >= Y + Z) or (Y >= X + Z) or (Z >= Y + X)):


print("Nao eh triangulo.")
else:
if ((X == Y) and (Y == Z)):
print("Triangulo equilatero")
else:
if ((X == Y) or (Y == Z) or (Z == X)):
print("Triangulo isosceles")
else:
print("Triangulo escaleno")

Funes de arredondamento
:: Mdulo math
ceil(x)

floor(x)

Arredonda x para o inteiro mais


prximo em direo a mais innito

Arredonda x para o inteiro mais


prximo em direo a menos
innito

Funes de arredondamento
:: Diferenas
ceil() e
floor()
Requer mdulo
math.
Possui apenas um
argumento de
entrada.
Resultado um
nmero inteiro.

round()
padro do Python.
No requer o
mdulo math.
Possui dois
argumentos de
entrada.
Resultado um
nmero real.

Funes de arredondamento
:: Diferenas

round

oor

ceil

Exemplo

round

oor

ceill

3.4

round(3.4,0) = 3

oor(3.4) = 3

ceill(3.4) = 4

3.6

round(3.6,0) = 4

oor(3.6) = 3

ceill(3.6) = 4

-3.4

round(-3.4,0) = -3

oor(-3.4) = -4

ceill(-3.4) = -3

-3.6

round(-3.6,0) = -4

oor(-3.6) = -4

ceill(-3.6) = -3
Fonte: Learn to Program with Small Basic

Problema 2

Calcular o alcance
de um projLl, dados
a velocidade inicial
0 e o ngulo
entre o cano do
canho e o solo.
Considere =9,81/
2.
=02/sen(2)

Problema 2
2 Denir entradas e sadas

Entradas
Sadas

Grandeza

Unidade de medida

Faixa de valores

Velocidade inicial

m/s

>= 0

ngulo com solo

graus

]0; 90[

Alcance

> 0

Problema 2
3 Projetar algoritmo
incio

(v0 >= 0) and (theta > 0) and


(theta < 90)

C1

v0, theta
g = 9.81
C1

F
Dados
invlidos

s = (v0**2 / g) * sin(2 * theta)


s

Problema 2
4 Codicar em Python
# Entrada
v0
=
theta_g =
g
=

de dados e definicao de constantes


float(input("Velocidade inicial: "))
float(input("Angulo: "))
9.81

# Importar modulo matematico


from math import *
if (v0 >= 0) and (theta_g > 0) and (theta_g < 90):
theta_rad = theta_g * pi / 180.0
s = (v0**2 / g) * sin(2 * theta_rad)
print(round(s, 3))
else:
print("Dados invalidos.")

Contedo
Como montar uma condio?
Estruturas Condicionais Encadeadas
Exemplos Extras

Estruturas Condicionais Encadeadas


Estruturas condicionais encadeadas (ou aninhadas)
so estruturas condicionais dentro de outras
estruturas condicionais.
Quando um problema exige um longo
encadeamento de ifs e elses, a criao de
diversos nveis deslocados poderia causar
confuso.
A clusula elif subsLtui um par else if sem
criar um outro nvel na estrutura condicional.

Estruturas Condicionais Encadeadas


:: Exemplo
if (delta < 0):
print("Nao tem raiz real")
else:
if (delta == 0):
r1 = -b/(2 * a)
else:
r1 = (-b+delta**0.5)/(2*a)
r2 = (-bdelta**0.5)/(2*a)

<0

=0

F
if (delta < 0):
print("Nao tem raiz real")
elif (delta == 0):
r1 = -b/(2 * a)
else:
r1 = (-b + delta**0.5)/(2*a)
r2 = (-b delta**0.5)/(2*a)

Calcular r1
e r2

Calcular
r1

Sem
soluo

Problema 3

Escrever um script em Python que leia um ngulo


entre 0 e 360 e informe o ponto cardeal
correspondente.

Problema 3
2 Denir entradas e sadas

Entradas
Sadas

Grandeza

Unidade de medida

Faixa de valores

ngulo

graus

[0; 360]

Ponto Cardeal

---

{N, S, L, O}

Problema 3
3 Projetar algoritmo
incio
ang
ang == 0 or
ang == 360
F
ang == 180 V

Norte
Sul"

F
ang == 90 V
F
ang == 270 V
F

Desconhecido
m

Leste
Oeste

Problema 3
4 Codicar em Python
# Entrada de dados
ang = int(input("Digite um angulo: "))
if ((ang == 0) or (ang == 360)):
print("Norte")
elif (ang == 180):
print("Sul")
elif (ang == 90):
print("Leste")
elif (ang == 270):
print("Oeste")
else:
print("Desconhecido")

Problema 4

Anos bissextos so denidos da


seguinte forma:
1. Anos divisveis por 400 so
bissextos.
2. Anos divisveis por 100, mas
no por 400, no so
bissextos.
3. Anos divisveis por 4, mas no
por 100, so bissextos.
4. Todos os outros anos no so
anos bissextos.

Escreva um script em Python


que determine se um ano
bissexto ou no.

Problema 4
2 Denir entradas e sadas

Entradas
Sadas
Sadas

Grandeza

Unidade de medida

Ano

---

Mensagem

---

Faixa de valores
{bissexto,
no bissexto}

Problema 4
3 Projetar algoritmo verso 1
ano % 400 == 0
F

V
Bissexto

ano % 100 == 0
F

V
No
bissexto

ano % 4 == 0
V
Bissexto

F
No
bissexto

Problema 4
3 Projetar algoritmo verso 1
incio

C1 ano % 400 == 0

ano

C2 ano % 100 == 0

C1
V

C3
C2

C3

V
Bissexto

No
bissexto

Bissexto

No
bissexto

ano % 4 == 0

Problema 4
4 Codicar em Python verso 1
# Entrada de dados
ano = int(input("Digite o ano: "))
# Verifica se ano eh bissexto
if (ano % 400 == 0):
print("Bissexto")
elif (ano % 100 == 0):
print("Nao Bissexto")
elif (ano % 4 == 0):
print("Bissexto")
else:
print("Nao Bissexto")

Problema 4
3 Projetar algoritmo verso 2
ano % 400 == 0
F

V
Bissexto

ano % 100 == 0
F

V
No
bissexto

ano % 4 == 0
V
Bissexto

Bissexto:

F
No
bissexto

ano % 400 == 0 OU (ano % 100 != 0) E (ano % 4 == 0)

Problema 4
3 Projetar algoritmo verso 2
C1

incio

(ano % 400 == 0)
or
((ano % 100 != 0) and (ano % 4 == 0))

ano
V

C1

No
bissexto

Bissexto

Problema 4
4 Codicar em Python verso 2
# Entrada de dados
ano = int(input("Digite o ano: "))
# Verifica se ano eh bissexto
if ((ano%400 == 0) or ((ano%100 != 0) and (ano%4 == 0))):
print("Bissexto")
else:
print("Nao Bissexto")

Problema 5
A parLr da renda
mensal, como
determinar o valor do
imposto de renda
devido?
Importante: as
alquotas so
aplicadas de forma
progressiva.

Problema 5
2 Denir entradas e sadas

Entradas
Sadas

Grandeza

Unidade de medida

Faixa de valores

Renda

R$

Imposto

R$

Problema 5
3 Projetar algoritmo

O que o clculo progressivo?


Uma pessoa que recebe R$ 1.500 mensais no pagar

imposto de 7,5% sobre os R$ 1.500, mas sim sobre a


diferena (1500,00 1499,15 = 0,85).
Da mesma maneira, quem recebe R$ 2.500 pagar:
n 7,5% de (2246,75 1499,15)
n 15% de (2500 2246,75)

E assim por diante...

Faixa de renda mensal

Alquota

At R$ 1.499,15

Isento

De R$ 1.499,16 at R$ 2.246,75

7,5%

De R$ 2.246,76 at R$ 2.995,70

15%

De R$ 2.995,71 at R$ 3.743,19

22,5%

acima de R$ 3.743,19

27,5%

Problema 5
3 Projetar algoritmo

Para simplicar o desenho do uxograma, vamos


adotar as seguintes convenes:
Faixa de renda mensal Constante
R$ 1.499,15
V1
R$ 2.246,75
V2
R$ 2.995,70
R$ 3.743,19

V3
V4

Problema 5
3 Projetar algoritmo verso 1
incio

Verso usada na aula anterior

R
R > V1
F

R > V2

R > V3
F

R > V4

imp = 0
imp = 0,075*(R-V1)
imp = 0,075*(V2-V1) +
0,15*(R-V2)
imp = 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(R-V3)
imp
m

imp = 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(V4-V3)+
0,275*(R-V4)

Problema 5
3 Projetar algoritmo verso 2
incio
Facilita uso do elif

R
R <= V1
V

R <= V2

R <= V3

R <= V4

imp = 0
imp = 0,075*(R-V1)
imp = 0,075*(V2-V1) +
0,15*(R-V2)
imp = 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(R-V3)
imp
m

imp = 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(V4-V3)+
0,275*(R-V4)

Problema 5
4 Codicar em Python
# Entrada de dados e definicao de constantes
r = float(input("Digite sua renda: "))
v1 = 1499.15
v2 = 2246.75
v3 = 2995.70
v4 = 3743.19
if (r <= v1):
imp = 0
elif (r <= v2):
imp = 0.075*(r-v1)
elif (r <= v3):
imp = 0.075*(v2-v1) + 0.15*(r-v2)
elif (r <= v4):
imp = 0.075*(v2-v1) + 0.15*(v3-v2) + 0.225*(r-v3)
else:
imp = 0.075*(v2-v1)+0.15*(v3-v2)+0.225*(v4-v3)+0.275*(r-v4)
print(imp)

Estruturas Condicionais
:: Reviso
Simples
(if)

Estruturas
Condicionais

Composta
(if ... else)

MlFpla escolha
(if ... elif ... else)

Contedo
Como montar uma condio?
Estruturas Condicionais Encadeadas
Exemplos Extras

Exemplo 1
Sejam A, B, C trs nmeros inteiros quaisquer.
Escreva um script Python para arrum-los em
ordem decrescente.

Exemplo 1
1 IdenLcar o problema
So dados trs nmeros quaisquer A, B, C.
Eles devem ser arrumados em ordem decrescente.
Pode-se considerar que a sada seja
N1 N2 N3
Agora, o problema se resume a atribuir:

A
B
C

N1
N2
N3

Exemplo 1
2 Denir entradas e sadas

Entradas
Sadas

Grandeza

A, B, C


N1, N2, N3

Unidade de medida
---
---

Faixa de valores
Inteiros, qualquer
ordem
Inteiros, ordem
decrescente

Exemplo 1
3 Projetar algoritmo
A > B
V

N1 A
N2 B

N1 B
N2 A
C > N1
V

N3 N2
N2 N1
N1 C

C > N2
V
N3 N2
N2 C

F
N3 C

Exemplo 1
3 Projetar algoritmo
incio

A, B, C

C > N1 F
V

A > B F
V

C > N2 F
V

N1 B
N2 A

N1 A
N2 B

N3 N2
N2 N1
N1 C

N3 N2
N2 C

1
N1, N2, N3
m

N3 C

Exemplo 1
4 Codicar em Python
#
a
b
c

Entrada de dados
= int(input("Digite o numero a: "))
= int(input("Digite o numero b: "))
= int(input("Digite o numero c: "))

if (a > b):
n1 = a
n2 = b
else:
n1 = b
n2 = a
if (c > n1):
n3 = n2
n2 = n1
n1 = c
else:
if (c > n2):
n3 = n2
n2 = c
else:
n3 = c
print("Numeros em ordem:",n1,n2,n3)

Exemplo 2

Um gerente quer medir


a ecincia de
processos em sua
empresa.
Um processo X
comeou no horrio h1
e terminou no mesmo
dia, no horrio h2,
tambm medido em
horas e minutos.
Quanto tempo durou o
processo?

Exemplo 2
2 Denir entradas e sadas

Entradas
Sadas
Sadas

Grandeza

Unidade
Unidade dde e m
medida
edida

Faixa
Faixa dde e vvalores
alores

Horrio 1 (hh1, mm1)

horas, minutos

[0; 23], [0; 59]

Horrio 1 (hh2, mm2)

horas, minutos

[0; 23], [0; 59]

Diferena de tempo
(h, m)

horas, minutos

[0; 23], [0; 59]

Exemplo 2
3 Projetar algoritmo
Caso 1

Caso 2

mm2 mm1

mm2 < mm1

Incio: 9h 17min
Fim: 15h 43min
m = 43 17 = 26min
h = 15 9 = 6h

Incio: 9h 43min
Fim: 15h 17min

m = 17 43 = 34min (-1h)
h = 15 9 1 = 5h

Exemplo 2
3 Projetar algoritmo
incio
hh1, mm1
hh2, mm2
dm = (mm2 mm1) % 60
mm2 >= mm1

V
dh = hh2 hh1

dh = hh2 hh1 1

dh, dm
m

Exemplo 2
4 Codicar em Python
# Entrada de dados
hh1 = int(input("Hora inicial: "))
mm1 = int(input("Minuto inicial: "))
hh2 = int(input("Hora final: "))
mm2 = int(input("Minuto final: "))
# Diferenca de minutos
dm = (mm2 mm1) % 60
# Diferenca de horas
if (mm2 >= mm1):
dh = hh2 hh1
else:
dh = hh2 hh1 1
print(dh, dm)

Exemplo 3
Uma quanLa inicial
aplicada a uma taxa de
juros. O saldo desse
invesLmento aps
meses dado por:
=(1+)
Para uma taxa ao ms,
quanto tempo (em anos e
meses) necessrio para
que o saldo dobre em
relao ao valor inicial?

Exemplo 3
2 Denir entradas e sadas

Entradas
Sadas

Grandeza

Unidade de medida

Faixa de valores

Taxa de juros (t)

---

[0; 1]

m (tempo)

anos; meses

[0, +[; [0, 11]

Exemplo 3
3 Projetar algoritmo
A sada do problema
a quanLdade de
meses e anos, mas a
sada da equao o
saldo, informao que
j conhecemos.
Portanto, temos de
reescrever a equao,
isolando o no lado
esquerdo.

=(1+)
2/=(1+)

log2=log(1+)
log2=log(1+)
=log2/log(1+)

Exemplo 3
3 Projetar algoritmo
A expresso anterior
resultar em um
nmero com parte
fracionria.
Contudo, o valor da
sada inteiro, pois o
rendimento acontece
a cada ms.
Logo, o resultado
deve ser arredondado
para cima
(math.ceil)

=log2/log(1+)

Exemplo 3
3 Projetar algoritmo
incio
t
(t >= 0) and (t <= 1)

V
m = ceil( log(2) / log(1 + t) )

Dados
invlidos

m // 12

anos

m % 12

meses

Exemplo 3
4 Codicar em Python
# Entrada de dados
t = float(input("Informe a taxa de aplicacao: "))
if ((t >= 0) and (t <= 1)):
# Importar modulo matematico
from math import *
m = ceil(log(2) / log(1 + t))
print(m // 12)
# no. de anos
print(m % 12)
# no. de meses (0 a 11)
else:
print("Dados invalidos")

Exemplo 4
Duas pessoas jogam pedra, papel, tesoura.
Como determinar quem ganhou?

Exemplo 4
2 Denir entradas e sadas

Entradas
Sadas

Grandeza

Unidade
Unidade dde e m
medida
edida

Faixa
Faixa dde e vvalores
alores

Mo do J1

---

{Pedra, Papel, Tesoura}

Mo do J2

---

{Pedra, Papel, Tesoura}

Vencedor

---

{J1, J2, Empate}

Exemplo 4
3 Projetar algoritmo verso 1

Se J1 == J2
Empate

J1 ganha quando:
(J1 == Pedra

E J2 == Tesoura) OU
(J1 == Papel
E J2 == Pedra) OU
(J1 == Tesoura E J2 == Papel)

J2 ganha caso contrrio

Exemplo 4
3 Projetar algoritmo verso 1
incio

C1

Sortear J1, J2
J1 == J2
V

(J1 == Pedra E J2 == Tesoura) OU


(J1 == Papel E J2 == Pedra) OU
(J1 == Tesoura E J2 == Papel)

F
C1

V
Empate

Jogador 1
ganhou

Jogador 2
ganhou


Como fazer o
sorteio?

Exemplo 4
4 Codicar em Python sorteio
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
from random import *
j1 = randint(0,2)
j2 = randint(0,2)

(J1 == Pedra E J2 == Tesoura)


OU
(J1 == Papel E J2 == Pedra) OU
(J1 == Tesoura E J2 == Papel)

(J1 == 0 E J2 == 2) OU
(J1 == 1 E J2 == 0) OU
(J1 == 2 E J2 == 1)

Exemplo 4
4 Codicar em Python verso 1
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
from random import *
j1 = randint(0,2)
j2 = randint(0,2)
if (j1 == j2):
print("Empate.")
else:
if (((j1 == 0) and (j2 == 2)) or ((j1 == 1) and (j2
== 0)) or ((j1 == 2) and (j2 == 1))):
print("Jogador 1 ganhou.")
else:
print("Jogador 2 ganhou.")

Abstrao
Associar objetos (pedra,
papel, tesoura) a nmeros
uma forma de
abstrao.
Adotamos essa abstrao
para simplicar o cdigo
do sorteio.
Tal simplicao no
poderia ser tambm
aplicada ao teste da
condio?

Exemplo 4
:: Repensando o Jogo
1

1
2

1
2

Legenda
Jogador em destaque
ganhou
Jogador em destaque
perdeu

Exemplo 4
:: Repensando o Jogo
Por exemplo,
natural pensar que
trs horas antes de 2h
no relgio resulta em
11h.
Inconscientemente,
fazemos as seguintes
contas:

2h 3h = 1h
1h + 12h = 11h

Operador %

O operador % tem uma propriedade interessante:

a % b
Se a posiLvo
Resultado: resto da diviso

Se a negaLvo
Resultado: determinado por aritmLca
circular, como em um relgio.

AritmLca circular (ou modular)


Uma casa
para trs

Duas casas
para trs

Trs casas
para trs

0
2

[0 1] = 2

1
0

(0 1) % 3 = 2

(0 2) % 3 = 1

(0 3) % 3 = 0

1
0

[0 3] = 0

1
0

[0 2] = 1

0
2

Exemplo 4
:: Repensando o Jogo

2
1
0

(2 1) % 3 = 1

(2 0) % 3 = 2

0
2

(1 0) % 3 = 1
(1 2) % 3 = 2

(0 2) % 3 = 1

(0 1) % 3 = 2

O resultado determina
quem ganhou:
1: Jogador 1
2: Jogador 2

Exemplo 4
3 Projetar algoritmo verso 2
incio

Teste esta condio no


Shell do Python, para todas
as possibilidades de J1 e J2

Sortear J1, J2
J1 == J2
V

(J1-J2)%3 == 1

V
Empate

Jogador 1
ganhou

Jogador 2
ganhou

Exemplo 4
4 Codicar em Python verso 2
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
from random import *
j1 = randint(0,2)
j2 = randint(0,2)
if (j1 == j2):
print("Empate.")
else:
if ((j1 - j2) % 3 == 1):
print("Jogador 1 ganhou.")
else:
print("Jogador 2 ganhou.")

Referncias bibliogrcas
Menezes, Nilo Ney CouLnho (2010). Introduo
Programao com Python. Editora Novatec.
HETLAND, Magnus Lie (2008). Beginning Python:
From Novice to Professional. Springer eBooks, 2
edio. Disponvel em: hp://dx.doi.org/
10.1007/978-1-4302-0634-7.
Gaddis, Tony (2012). StarLng out with Python, 2
edio. Editora Addison-Wesley.
DIERBACH, Charles. IntroducLon to Computer
Science using Python: a computaLonal problem-
solving approach. John Wiley & Sons, 2012.

Dvidas?

Você também pode gostar