diff --git a/baralho.py b/baralho.py index 3d92cbc..bc5a61f 100644 --- a/baralho.py +++ b/baralho.py @@ -4,9 +4,10 @@ Carta = namedtuple('Carta', 'valor naipe') + class Baralho: - valores = [str(n) for n in range(2, 11)] + list('JQKA') - naipes = 'paus ouros copas espadas'.split() + valores = '2 3 4 5 6 7 8 9 10 J Q K A'.split() + naipes = '♣ ♢ ♡ ♠'.split() def __init__(self): self.cartas = [Carta(v, n) for n in self.naipes for v in self.valores] @@ -16,7 +17,3 @@ def __len__(self): def __getitem__(self, pos): return self.cartas[pos] - - - - diff --git a/caes/cao.py b/caes/cao.py index 43320a6..11198c5 100644 --- a/caes/cao.py +++ b/caes/cao.py @@ -1,6 +1,4 @@ -# coding: utf-8 - -class Mamifero(object): +class Mamifero: """vertebrados dotados de glândulas mamárias""" @@ -36,7 +34,7 @@ class Pequines(Cao): """ nervoso = True -class GrandeMixin(object): +class GrandeMixin: """ Mixin: muda o latido""" def latir(self, vezes=1): # faz de conta que cães grandes não mudam diff --git a/carta.py b/carta.py index 4ca0374..40a0494 100644 --- a/carta.py +++ b/carta.py @@ -1,8 +1,11 @@ -class Carta(object): +class Carta: def __init__(self, valor, naipe): self.valor = valor self.naipe = naipe def __repr__(self): return 'Carta(valor=%r, naipe=%r)' % (self.valor, self.naipe) + +if __name__ == '__main__': + print(Carta('A', '♣')) diff --git a/exemplos/__init__.py b/exemplos/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exemplos/aluno.py b/exemplos/aluno.py new file mode 100644 index 0000000..31f7b66 --- /dev/null +++ b/exemplos/aluno.py @@ -0,0 +1,25 @@ +import functools + + +@functools.total_ordering +class Aluno: + def __init__(self, nota): + self.nota = nota + + def __eq__(self, other): + return self.nota == other.nota + + def __gt__(self, other): + return self.nota > other.nota + + +if __name__ == '__main__': + aluno_nota_10 = Aluno(10) + outro_aluno_nota_10 = Aluno(10) + aluno_nota_1 = Aluno(1) + print(aluno_nota_10 == outro_aluno_nota_10) # True + print(aluno_nota_10 == aluno_nota_1) # False + print(aluno_nota_10 > outro_aluno_nota_10) # True + print(aluno_nota_10 > aluno_nota_1) # False + print(aluno_nota_10 >= aluno_nota_1) # False + print(aluno_nota_10 <= aluno_nota_1) # False diff --git a/exemplos/bicicleta.py b/exemplos/bicicleta.py new file mode 100644 index 0000000..074156b --- /dev/null +++ b/exemplos/bicicleta.py @@ -0,0 +1,62 @@ +import abc + + +class Bicleta(abc.ABC): + _marca = 'Caloi' + + def __init__(self): + self._velocidade = 0 + + @classmethod + def marca(cls): + return cls._marca + + @staticmethod + def rodas(): + return 2; + + @property + def velocidade(self): + print('velocidade') + return self._velocidade + + @velocidade.setter + def velocidade(self, valor): + if valor >= 0: + self._velocidade = valor + else: + self._velocidade = 0 + + @abc.abstractmethod + def pedalar(self): + """Cada classe concreta deve definir o método pedalar com seu + incremento na velocidade""" + + @abc.abstractmethod + def frear(self): + """Cada classe concreta deve definir o método frear com seu + decremento na velocidade""" + + +class Monark(Bicleta): + _marca = 'Monark' + + def pedalar(self): + self.velocidade += 10 + + def frear(self): + self.velocidade -= 3 + + +if __name__ == '__main__': + bicicleta = Monark() + print(Bicleta.marca()) + bicicleta.pedalar() + bicicleta.frear() + bicicleta.frear() + bicicleta.frear() + bicicleta.frear() + bicicleta.velocidade = -4 + print(bicicleta.velocidade) + print(Monark.marca()) + print(Monark.rodas()) diff --git a/exemplos/timer.py b/exemplos/timer.py new file mode 100644 index 0000000..ae7db19 --- /dev/null +++ b/exemplos/timer.py @@ -0,0 +1,36 @@ +from tkinter import Frame, Label, Button + + +class Timer(Frame): + def __init__(self): + super().__init__() + self.inicio = self.agora = 15 + self.pendente = None # alarme pendente + self.grid() + self.mostrador = Label( + self, width=2, anchor='e', font='Helvetica 120 bold') + self.mostrador.grid(column=0, row=0, sticky='nswe') + self.bt_start = Button(self, text='Start', command=self.start) + self.bt_start.grid(column=0, row=1, sticky='we') + self.atualizar_mostrador() + + def atualizar_mostrador(self): + self.mostrador['text'] = str(self.agora) + + def start(self): + if self.pendente: + self.after_cancel(self.pendente) + self.agora = self.inicio + self.atualizar_mostrador() + self.pendente = self.after(1000, self.tictac) + + def tictac(self): + self.agora -= 1 + self.atualizar_mostrador() + if self.agora > 0: + self.pendente = self.after(1000, self.tictac) + + +if __name__ == '__main__': + timer = Timer() + timer.mainloop() diff --git a/exemplos/vetor.py b/exemplos/vetor.py new file mode 100644 index 0000000..45b02f2 --- /dev/null +++ b/exemplos/vetor.py @@ -0,0 +1,44 @@ +import math + + +class Vetor: + def __init__(self, x, y): + self.y = y + self.x = x + + def __repr__(self) -> str: + return 'Vetor({}, {})'.format(self.x, self.y) + + def __abs__(self): + return math.sqrt(self.x ** 2 + self.y ** 2) + + def __add__(self, vetor): + return Vetor(self.x + vetor.x, self.y + vetor.y) + + def __iadd__(self, other): + self.x += other.x + self.y += other.y + return self + + def __mul__(self, n): + return Vetor(self.x * n, self.y * n) + + def __rmul__(self, n): + return self * n + + +if __name__ == '__main__': + vetor_1 = Vetor(3, 4) + print(vetor_1) + print(abs(vetor_1)) + vetor_2 = Vetor(1, 1) + print(vetor_1 + vetor_2) + print(vetor_1) + print(vetor_2) + print(id(vetor_1)) + vetor_1 += vetor_2 + print(id(vetor_1)) + print(vetor_1) + + print(vetor_1 * 2) + print(2 * vetor_1) diff --git a/exercicios/arvore.py b/exercicios/arvore.py new file mode 100644 index 0000000..5daf184 --- /dev/null +++ b/exercicios/arvore.py @@ -0,0 +1,17 @@ +class Arvore: + ''' + >>> for noh in Arvore(0, Arvore(-2, Arvore(-4), Arvore(-1)), Arvore( + ... 10)): + ... print(noh) + -4 + -2 + -1 + 0 + 10 + + ''' + + def __init__(self, valor, esquerda=None, direita=None): + self.valor = valor + self.esquerda = esquerda + self.direita = direita diff --git a/exercicios/matriz.md b/exercicios/matriz.md new file mode 100644 index 0000000..372d7d1 --- /dev/null +++ b/exercicios/matriz.md @@ -0,0 +1,22 @@ +# Criando classe matriz que sobrecarrega multiplicacao de Matrizes + +Deve ser possível criar duas matrizes + +``` python + >>> from exercicios.matriz import Matriz + >>> m1=Matriz([[1] , [2]) # Matriz 2x1 + >>> m2=Matriz([3 , 4]) # Matriz 1x2 + +``` + +Deve ser possível multiplicar Matrizes onde o número de colunas da primeira +é igual ao número de linhas da segunda + + + +``` python + >>> m1 @ m2 + Matriz([[3, 4], [6, 8]]) + +``` + diff --git a/relogio.py b/relogio.py index e1ac857..b663600 100644 --- a/relogio.py +++ b/relogio.py @@ -5,7 +5,7 @@ class Relogio(tkinter.Label): def __init__(self): - tkinter.Label.__init__(self) + super().__init__() self.pack() self['text'] = strftime('%H:%M:%S') self['font'] = 'Helvetica 120 bold' diff --git a/trens/README.md b/trens/README.md new file mode 100644 index 0000000..e083e1b --- /dev/null +++ b/trens/README.md @@ -0,0 +1,13 @@ +#Esse arquvivo documeta o comportamento de um Trem + +```python + >>> from trens.trem_gof import Trem + >>> t = Trem(4) + >>> for vagao in t: + ... print(vagao) + vagao #1 + vagao #2 + vagao #3 + vagao #4 + +``` \ No newline at end of file diff --git a/trens/__init__.py b/trens/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/trens/trem_exp_gen.py b/trens/trem_exp_gen.py new file mode 100644 index 0000000..03e62a3 --- /dev/null +++ b/trens/trem_exp_gen.py @@ -0,0 +1,11 @@ +class Trem: + def __init__(self, num_vagoes): + self.num_vagoes = num_vagoes + + def __iter__(self): + return ('vagao #%s' % vagao for vagao in range(1, self.num_vagoes + 1)) + + +if __name__ == '__main__': + for vagao in Trem(4): + print(vagao) diff --git a/trens/trem_gen.py b/trens/trem_gen.py new file mode 100644 index 0000000..4e7d860 --- /dev/null +++ b/trens/trem_gen.py @@ -0,0 +1,12 @@ +class Trem: + def __init__(self, num_vagoes): + self.num_vagoes = num_vagoes + + def __iter__(self): + for vagao in range(1, self.num_vagoes + 1): + yield 'vagao #%s' % vagao + + +if __name__ == '__main__': + for vagao in Trem(4): + print(vagao) diff --git a/trens/trem_gof.py b/trens/trem_gof.py new file mode 100644 index 0000000..1367f49 --- /dev/null +++ b/trens/trem_gof.py @@ -0,0 +1,24 @@ +class Trem: + def __init__(self, num_vagoes): + self.num_vagoes = num_vagoes + + def __iter__(self): + return IteradorTrem(self.num_vagoes) + + +class IteradorTrem: + def __init__(self, num_vagoes): + self.atual = 0 + self.ultimo_vagao = num_vagoes - 1 + + def __next__(self): + if self.atual <= self.ultimo_vagao: + self.atual += 1 + return 'vagao #%s' % self.atual + else: + raise StopIteration() + + +if __name__ == '__main__': + for vagao in Trem(4): + print(vagao) diff --git a/trens/trem_seq.py b/trens/trem_seq.py new file mode 100644 index 0000000..cacd7b8 --- /dev/null +++ b/trens/trem_seq.py @@ -0,0 +1,17 @@ +class Trem: + def __init__(self, num_vagoes): + self.num_vagoes = num_vagoes + + def __len__(self): + return self.num_vagoes + + def __getitem__(self, pos): + indice = pos if pos >= 0 else self.num_vagoes + pos + if 0 <= indice < self.num_vagoes: + # indice 2 -> vagao #3 + return 'vagao #%s' % (indice + 1) + raise IndexError('vagao inexistente %s' % pos) + +if __name__ == '__main__': + for vagao in Trem(4): + print(vagao)