Verificando tipos
>>> i = 32>>> j = 4.1>>> k = 10L>>> l = [1, 2, 4]>>> t = 3, 1>>> d = {3:1, 4:'batata'}>>> type(i)<type 'int'>>>> type(j)<type 'float'>>>> type(k)<type 'long'>>>> type(l)<type 'list'>>>> type(t)<type 'tuple'>>>> type(d)<type 'dict'>
Desenhando aleatoriamente
import randomimport turtle
turtle.speed('fastest')
for i in range(1000):ang = random.randint(-40, 40)turtle.left(ang)
turtle.forward(2)
turtle.done()
Vamos adicionar tartarugas
import randomimport turtle
turtle.speed('fastest')
t1 = turtle.Turtle()t1.speed('fastest')t1.color(1, 0, 0)
for i in range(1000):ang = random.randint(-40, 40)turtle.left(ang)turtle.forward(2)
ang = random.randint(-40, 40)t1.left(ang)t1.forward(2)
turtle.done()
Vamos adicionar tartarugas
import randomimport turtle
turtle.speed('fastest')
col = 'red', 'green', 'blue'ts = []for i in range(3):
t = turtle.Turtle()t.speed('fastest')t.color(col[i])ts.append(t)
# continua no proximo slide...
Vamos adicionar tartarugas
# Continuacao
for i in range(1000):ang = random.randint(-40, 40)turtle.left(ang)turtle.forward(2)
for t in ts:ang = random.randint(-40, 40)t.left(ang)t.forward(2)
turtle.done()
O que são estas "tartarugas"?
>>> import turtle
>>> t = turtle.Turtle()
>>> type(t)
<class 'turtle.Turtle'>
Analisando
Que dados cada tartaruga possui?
● posição● orientação● cor● velocidade● etc (não conhecemos tudo)
Vetores 2d
>>> u = turtle.Vec2D(1, 3)>>> v = turtle.Vec2D(5, 10)>>> u+v(6.00,13.00)>>> u*v35>>> 2*u(2.00,6.00)>>> u.rotate(30)(-0.63,3.10)>>> type(u)<class 'turtle.Vec2D'>>>> type(v)<class 'turtle.Vec2D'>
Módulo datetime
>>> import datetime>>> x = datetime.date(2015, 11, 18)>>> x.day18>>> x.month11>>> x.year2015>>> x.ctime()'Wed Nov 18 00:00:00 2015'>>> x.weekday()2>>> x.today()datetime.date(2015, 11, 12)
Módulo datetime
>>> import datetime>>> a = datetime.time(12, 23, 49, 41878)>>> a.hour12>>> a.minute23>>> a.second49>>> a.microsecond41878>>> a.isoformat()'12:23:49.041878'
Classes
Uma classe é um tipo de dado no Python.
Todo valor pertence a alguma classe.
4 pertence à classe int
1.0 pertence à classe float
'samambaia' pertence à classe str
...
Classes
>>> help(int)
Help on class int in module __builtin__:
class int(object) | int(x=0) -> int or long | int(x, base=10) -> int or long | | Convert a number or string to an integer, or return 0 if no arguments | are given. If x is floating point, the conversion truncates towards zero. | Bla, bla, bla, bla, bla, etc, etc, bla, bla
Classes
>>> help(float)
Help on class float in module __builtin__:
class float(object) | float(x) -> floating point number | | Convert a string or number to a floating point number, if possible. | | Methods defined here: | | Bla, bla, bla, whiskas sache, bla, bla, bla, bla
Objetos
Um objeto é um exemplar (instância) de uma classe.
42 é um objeto da class int
'bola' é um objeto da classe strstr
5+2j é um objeto da classe complex
x = turtle.Turtle()
x é um objeto da classe turtle.Turtle
a rigor, x é uma variável associada a um objeto
Métodos
Métodos são as funções chamadas escrevendo objeto.metodo(parametros)
>>> x = 'batatinha quando nasce se esparrama pelo chao'
>>> x.upper()
'BATATINHA QUANDO NASCE SE ESPARRAMA PELO CHAO'
>>> x.count('a')
9
>>> x.split()
['batatinha', 'quando', 'nasce', 'se', 'esparrama', 'pelo', 'chao']
Primeiro passo: planejamento
Imagine que você esteja desenvolvendo um jogo.
No seu jogo, haverá vários personagens, que vão lutar entre si.
Cada personagem possui (pelo menos) os seguintes atributos:
● nome● pontos de vida● nível● XP: pontos de experiência
Criando objetos desta classe
>>> a = Personagem()>>> a.nome'sem nome'>>> a.nivel1>>> a.vida100>>> a.xp0
Alterando objetos
a = Personagem()a.nome = 'Pikachu'
b = Personagem()b.nome = 'Charmander'
c = Personagem()c.nome = 'Bulbassauro'
Criando métodos
class Personagem:nome = 'sem nome'vida = 100nivel = 1xp = 0
def mostra_tudo(self):print 'nome:', self.nomeprint 'vida:', self.vidaprint 'nivel:', self.nivelprint 'xp:', self.xp
Criando métodos
a = Personagem()a.nome = 'Charmander'
b = Personagem()b.nome = 'Onix'b.vida = 80b.nivel = 13b.xp = 73
a.mostra_tudo()b.mostra_tudo()
nome: Charmandervida: 100nivel: 1xp: 0nome: Onixvida: 80nivel: 13xp: 73
Saída do programa:
Criando métodos
a = Personagem()a.nome = 'Charmander'
b = Personagem()b.nome = 'Onix'b.vida = 80b.nivel = 13b.xp = 73
Personagem.mostra_tudo(a)Personagem.mostra_tudo(b)
nome: Charmandervida: 100nivel: 1xp: 0nome: Onixvida: 80nivel: 13xp: 73
Saída do programa:
Criando métodos
class Personagem:nome = 'sem nome'vida = 100nivel = 1xp = 0
def mostra_tudo(self):print 'nome:', self.nomeprint 'vida:', self.vidaprint 'nivel:', self.nivelprint 'xp:', self.xp
def aumenta_xp(self, n):self.xp += nprint self.nome, 'ganhou', n, 'pontos de experiencia!'
Criando métodos
a = Personagem()a.nome = 'Butterfree'
b = Personagem()b.nome = 'Zubat'
a.aumenta_xp(37)b.aumenta_xp(42)
Butterfree ganhou 37 pontos de experiencia!Zubat ganhou 42 pontos de experiencia!
Saída do programa:
Construtor
class Personagem:nome = 'sem nome'vida = 100nivel = 1xp = 0
def __init__(self, nome):self.nome = nome
... bla bla bla
Criando métodos
a = Personagem('Diglett')b = Personagem('Psyduck')
a.aumenta_xp(61)b.aumenta_xp(25)
Diglett ganhou 61 pontos de experiencia!Psyduck ganhou 25 pontos de experiencia!
Saída do programa:
Construtor
class Personagem:nome = 'sem nome'vida = 100nivel = 1xp = 0
def __init__(self, nome):self.nome = nome
... bla bla bla
Este valor nunca será usado!
Construtor
class Personagem:
vida = 100nivel = 1xp = 0
def __init__(self, nome):self.nome = nome
... bla bla bla
Atributos
class Teste:lista = []
x = Teste()y = Teste()x.lista.append(5)y.lista.append(10)print x.listaprint y.lista
[5, 10][5, 10]
Saída do programa:
[5][10]
Saída do programa:
Atributos
class Teste:def __init__(self):
self.lista = []x = Teste()y = Teste()x.lista.append(5)y.lista.append(10)print x.listaprint y.lista
[5, 10][5, 10]
Saída do programa:
[5][10]
Saída do programa:
Evite problemas: defina atributos no construtor!
class Personagem:
def __init__(self, nome):self.nome = nome
self.vida = 100
self.nivel = 1
self.xp = 0
... bla bla bla
Completando nossa classe
class Personagem:... bla bla bla
def aumenta_xp(self, n):self.xp += nprint self.nome, 'ganhou', n, 'pontos de experiencia!'
if self.xp >= 100:
self.nivel += 1
self.xp = 0
print self.nome, 'subiu para o nivel', self.nivel
Testando nossa classe
x = Personagem('Ekans')y = Personagem('Arbok')x.aumenta_xp(38)y.aumenta_xp(47)x.aumenta_xp(29)y.aumenta_xp(39)x.aumenta_xp(43)y.aumenta_xp(26)
Ekans ganhou 38 pontos de experiencia!Arbok ganhou 47 pontos de experiencia!Ekans ganhou 29 pontos de experiencia!Arbok ganhou 39 pontos de experiencia!Ekans ganhou 43 pontos de experiencia!Ekans subiu para o nivel 2Arbok ganhou 26 pontos de experiencia!Arbok subiu para o nivel 2
Saída do programa:
Testando nossa classe
import random
a = Personagem('Ponyta')b = Personagem('Slowpoke')c = Personagem('Cubone')
for i in range(5):a.aumenta_xp(random.randint(15, 50))b.aumenta_xp(random.randint(15, 50))c.aumenta_xp(random.randint(15, 50))
Testando nossa classe
Ponyta ganhou 27 pontos de experiencia!Slowpoke ganhou 29 pontos de experiencia!Cubone ganhou 45 pontos de experiencia!Ponyta ganhou 16 pontos de experiencia!Slowpoke ganhou 21 pontos de experiencia!Cubone ganhou 38 pontos de experiencia!Ponyta ganhou 20 pontos de experiencia!Slowpoke ganhou 28 pontos de experiencia!Cubone ganhou 50 pontos de experiencia!Cubone subiu para o nivel 2Ponyta ganhou 15 pontos de experiencia!Slowpoke ganhou 48 pontos de experiencia!Slowpoke subiu para o nivel 2Cubone ganhou 37 pontos de experiencia!Ponyta ganhou 38 pontos de experiencia!Ponyta subiu para o nivel 2Slowpoke ganhou 31 pontos de experiencia!Cubone ganhou 45 pontos de experiencia!
Saída do programa:
Documentação com docstrings
def area_triangulo(a, b, c): 'Calcula a area de um triangulo.' p = (a+b+c)/2.0 return (p*(p-a)*(p-b)*(p-c))**0.5
string explicando a função
Documentação com docstrings
def area_triangulo(a, b, c): '''Calcula a area de um triangulo de lados a, b, c.''' p = (a+b+c)/2.0 return (p*(p-a)*(p-b)*(p-c))**0.5
string explicando a função
Documentação com docstrings
>>> help(area_triangulo)Help on function area_triangulo in module __main__:
area_triangulo(a, b, c) Calcula a area de um triangulo de lados a, b, c.
Documentando nossa classe
>>> help(Personagem) Help on class Personagem in module __main__:
class Personagem | Methods defined here: | | __init__(self, nome) | | aumenta_xp(self, n) | | mostra_tudo(self)
Documentando nossa classe
class Personagem:'''Um personagem do nosso incrivel jogo.Cada personagem possui:- nome- pontos de vida- nivel- pontos de experiencia'''
bla, bla, bla
Documentando nossa classe
>>> help(Personagem) Help on class Personagem in module __main__:
class Personagem | Um personagem do nosso incrivel jogo. | Cada personagem possui: | - nome | - pontos de vida | - nivel | - pontos de experiencia | | Methods defined here: | | __init__(self, nome) | | aumenta_xp(self, n) | | mostra_tudo(self)
Documentando nossa classe
class Personagem:...def __init__(self, nome):
'''Inicializa um personagem com o nome especificado.'''self.nome = nomeself.vida = 100self.nivel = 1self.xp = 0
...
Documentando nossa classe
class Personagem:...def aumenta_xp(self, n):
'''Ganha n pontos de experiencia. Aumenta de nivel caso os pontos de experiencia chegarem a 100 ou mais.'''self.xp += nprint self.nome, 'ganhou', n, 'pontos de experiencia!'if self.xp >= 100:
self.nivel += 1self.xp = 0print self.nome, 'subiu para o nivel', self.nivel
...
Documentando nossa classe
class Personagem:...def mostra_tudo(self):
'''Imprime todas os dados do personagem.'''print 'nome:', self.nomeprint 'vida:', self.vidaprint 'nivel:', self.nivelprint 'xp:', self.xp
...
help(Personagem)
Help on class Personagem in module __main__:
class Personagem | Um personagem do nosso incrivel jogo. | Cada personagem possui: | - nome | - pontos de vida | - nivel | - pontos de experiencia | | Methods defined here: | | __init__(self, nome) | Inicializa um personagem com | o nome especificado. | | aumenta_xp(self, n) | Ganha n pontos de experiencia. | Aumenta de nivel caso os pontos de | experiencia chegarem a 100 ou mais. | | mostra_tudo(self) | Imprime todas os dados do personagem.