Skip to content

Instantly share code, notes, and snippets.

@arturfsousa
Created October 5, 2012 19:38
Show Gist options
  • Save arturfsousa/3841895 to your computer and use it in GitHub Desktop.
Save arturfsousa/3841895 to your computer and use it in GitHub Desktop.
Solução lista_2 (Tômbola com BUG) do curso OOPY - Turma 0
# coding: utf-8
"""
===========================
Testando um tômbola com bug
===========================
Para começar, vamos criar uma instância de tômbola. Nessa implementação,
é necessário fornecer uma sequência de itens ao construtor::
>>> from tombola_bug import Tombola
>>> bolas = [77, 88, 99]
>>> t = Tombola(bolas)
>>> t.carregada()
True
Vamos tirar a última bola::
>>> t.sortear() # sortear sem misturar devolve o ultimo item colocado
99
Agora veja o que aconteceu com a lista ``bolas``::
>>> bolas #doctest: +SKIP
[77, 88]
(veja nota no final deste texto para enteder o -SKIP)
Porque isso aconteceu?
Dica: a explicação começa por aqui::
>>> t.itens is bolas #doctest: +SKIP
True
Isso é um problema porque o usuário da tômbola provavelmente não espera
que itens de sua lista serão descartados durante o uso.
O que deve ser feito para eliminar este problema e fazer o teste a seguir
passar?
>>> bolas
[77, 88, 99]
NOTA: Uma vez resolvido este exercício você poderá mudar a diretiva -SKIP
para +SKIP na linha 24 para ignorar aquele teste.
"""
class Tombola(object):
'''IMPLEMENTACAO COM BUG!!!'''
def __init__(self, seq):
'''
(2.3, Bônus) Isto acontece pois o attr da instância self.itens se
tornou um outro "rótulo" do objeto lista [77, 88, 99] assim como o
name bolas depois da atribuição self.itens = seq. Basta fazer com que
self.itens aponte para um outro objeto igual usando a função interna
list() ou o operador de slice sozinho (sem intervalos) [:].
'''
# self.itens = seq
self.itens = list(seq)
# ou
# self.itens = seq[:]
def carregar(self, seq):
self.itens.extend(seq)
def sortear(self):
return self.itens.pop()
def carregada(self):
return bool(self.itens)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment