Ejemplo Python 014809
Ejemplo Python 014809
Listados Completos de
Python
def __str__(self):
return ’(’ + str(self.x) + ’, ’ + str(self.y) + ’)’
def reverse(self):
244 Listados Completos de Python
def delDerechoYDelReves(derecho):
from copy import copy
reves = copy(derecho)
reves.reverse()
print str(derecho) + str(reves)
def __str__(self):
return str(self.horas) + ":" + str(self.minutos) \
+ ":" + str(self.segundos)
def convierteASegundos(self):
minutos = self.horas * 60 + self.minutos
segundos = self.minutos * 60 + self.segundos
return segundos
def haceHora(segs):
hora = Hora()
hora.horas = segs/3600
segs = segs - hora.horas * 3600
hora.minutos = segs/60
segs = segs - hora.minutos * 60
C.3 Cartas, mazos y juegos 245
hora.segundos = segs
return hora
class Carta:
listaDePalos = ["Tréboles", "Diamantes", "Corazones",
"Picas"]
listaDeValores = ["nada", "As", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "Sota", "Reina", "Rey"]
def __str__(self):
return (self.listaDeValores[self.valor] + " de " +\
self.listaDePalos[self.palo])
class Mazo:
def __init__(self):
self.cartas = []
for palo in range(4):
for valor in range(1, 14):
self.cartas.append(Carta(palo, valor))
def muestraMazo(self):
for carta in self.cartas:
print carta
246 Listados Completos de Python
def __str__(self):
s = ""
for i in range(len(self.cartas)):
s = s + " "*i + str(self.cartas[i]) + "\n"
return s
def mezclar(self):
import random
nCartas = len(self.cartas)
for i in range(nCartas):
j = random.randrange(i, nCartas)
self.cartas[i], self.cartas[j] =\
self.cartas[j], self.cartas[i]
def darCarta(self):
return self.cartas.pop()
def estaVacio(self):
return (len(self.cartas) == 0)
class Mano(Mazo):
def __init__(self, nombre=""):
self.cartas = []
self.nombre = nombre
def agregaCarta(self,carta) :
self.cartas.append(carta)
C.3 Cartas, mazos y juegos 247
def __str__(self):
s = "La mano de " + self.nombre
if self.estaVacio():
s = s + " está vacı́a\n"
else:
s = s + " contiene\n"
return s + Mazo.__str__(self)
class JuegoDeCartas:
def __init__(self):
self.mazo = Mazo()
self.mazo.mezclar()
class ManoDeLaMona(Mano):
def eliminaCoincidencias(self):
cant = 0
cartasOriginales = self.cartas[:]
for carta in cartasOriginales:
empareja = Carta(3 - carta.palo, carta.valor)
if empareja in self.cartas:
self.cartas.remove(carta)
self.cartas.remove(empareja)
print "Mano %s: %s con %s" % (self.nombre,carta,empareja)
cant = cant + 1
return cant
class JuegoDeLaMona(JuegoDeCartas):
def jugar(self, nombres):
# quitamos la Reina de Tréboles
self.mazo.eliminaCarta(Carta(0,12))
def eliminaTodasLasCoincidencias(self):
cant = 0
for mano in self.manos:
cant = cant + mano.eliminaCoincidencias()
return cant
def muestraManos(self) :
for mano in self.manos :
print mano
C.4 Lists Enlazadas 249
def imprimeAlReves(lista):
if lista == None: return
cabeza = lista
cola = lista.siguiente
imprimeAlReves(cola)
print cabeza,
def imprimeAlRevesBonito(lista) :
print "[",
if lista != None :
cabeza = lista
cola = lista.siguiente
imprimeAlReves(cola)
print cabeza,
print "]",
def eliminaSegundo(lista):
if lista == None: return
primero = lista
segundo = lista.siguiente
primero.siguiente = segundo.siguiente
segundo.siguiente = None
return segundo
class Nodo:
def __init__(self, carga=None, siguiente=None):
self.carga = carga
self.siguiente = siguiente
def __str__(self):
return str(self.carga)
250 Listados Completos de Python
def imprimeAlReves(self):
if self.siguiente != None:
cola = self.siguiente
cola.imprimeAlReves()
print self.carga,
class ListaEnlazada :
def __init__(self) :
self.longitud = 0
self.cabeza = None
def imprimeAlReves(self):
print "[",
if self.cabeza != None:
self.cabeza.imprimeAlReves()
print "]",
def pop(self) :
return self.elementos.pop()
def isEmpty(self) :
return (self.elementos == [])
def evalPostfijo(expr):
C.6 Colas y colas priorizadas 251
import re
listaTokens = re.split("([^0-9])", expr)
pila = Pila()
for token in listaTokens:
if token == ’’ or token == ’ ’:
continue
if token == ’+’:
suma = pila.pop() + pila.pop()
pila.push(suma)
elif token == ’*’:
producto = pila.pop() * pila.pop()
pila.push(producto)
else:
pila.push(int(token))
return pila.pop()
class Cola :
def __init__(self) :
self.longitud = 0
self.cabeza = None
def vacia(self) :
return (self.longitud == 0)
def quita(self) :
carga = self.cabeza.carga
self.cabeza = self.cabeza.next
self.longitud = self.longitud - 1
return carga
class ColaMejorada :
def __init__(self) :
self.longitud = 0
self.cabeza = None
self.ultimo = None
def vacia(self) :
return (self.longitud == 0)
def quita(self) :
carga = self.cabeza.carga
self.cabeza = self.cabeza.siguiente
self.longitud = self.longitud - 1
if self.longitud == 0 : self.ultimo = None
return carga
class ColaPriorizada :
def __init__(self) :
self.elementos = []
def vacia(self) :
C.7 Árboles 253
return self.elementos == []
def quita(self) :
maxi = 0
for i in range(1,len(self.elementos)) :
if self.elementos[i] > self.elementos[maxi] :
maxi = i
elemento = self.elementos[maxi]
self.elementos[maxi:maxi+1] = []
return elemento
class Golfista :
def __init__(self, nombre, puntos) :
self.nombre = nombre
self.puntos = puntos
def __str__(self) :
return "%-15s: %d" % (self.nombre, self.puntos)
C.7. Árboles
class Arbol :
def __init__(self, carga, izquierda=None, derecha=None) :
self.carga = carga
self.izquierda = izquierda
self.derecha = derecha
def __str__(self) :
return str(self.carga)
def total(arbol) :
if arbol == None : return 0
return total(arbol.izquierda) + total(arbol.derecha) + arbol.carga
def imprimeArbol(arbol):
if arbol == None: return
print arbol.carga,
imprimeArbol(arbol.izquierda)
imprimeArbol(arbol.derecha)
def imprimeArbolPosfijo(arbol):
if arbol == None: return
imprimeArbolPosfijo(arbol.izquierda)
imprimeArbolPosfijo(arbol.derecha)
print arbol.carga,
def imprimeArbolInfijo(arbol):
if arbol == None: return
imprimeArbolInfijo(arbol.izquierda)
print arbol.carga,
imprimeArbolInfijo(arbol.derecha)
return 0
def obtieneProducto(listaToken) :
a = obtieneNumero(listaToken)
if tomaToken(listaToken, ’*’) :
b = obtieneProducto(listaToken)
return Arbol(’*’, a, b)
else :
return a
def obtieneSuma(listaToken) :
a = obtieneProducto(listaToken)
if tomaToken(listaToken, ’+’) :
b = obtieneSuma(listaToken)
return Arbol(’+’, a, b)
else :
return a
def obtieneNumero(listaToken):
if tomaToken(listaToken, ’(’) :
x = obtieneSuma(listaToken) # obtiene subexpresión
tomaToken(listaToken, ’)’) # se come el cierre de paréntesis
return x
else :
x = listaToken[0]
if type(x) != type(0) : return None
listaToken[0:1] = [] # quita el token
return Arbol(x, None, None) # devuelve una hoja sin el número
# recorrer el árbol
256 Listados Completos de Python
arbol = raiz
while arbol.tomaIzquierda() != None:
indicador = arbol.tomaCarga() + "? "
if si(indicador):
arbol = arbol.tomaDerecha()
else:
arbol = arbol.tomaIzquierda()
# intentar adivinar
adivina = arbol.tomaCarga()
indicador = "Es un " + adivina + "? "
if si(indicador):
print "^
A<Soy el más grande!"
continue
# a~
nadir información nueva al árbol
arbol.ponCarga(pregunta)
indicador = "Si el animal fuera un %s, cuál serı́a la respuesta? "
if si(indicador % animal):
arbol.ponIzquierda(Arbol(adivina))
arbol.ponDerecha(Arbol(animal))
else:
arbol.ponIzquierda(Arbol(animal))
arbol.ponDerecha(Arbol(adivina))
def si(preg):
from string import lower
resp = lower(raw_input(preg))
return (resp[0:1] == ’s’)
self.numerador = numerador / m
self.denominador = denominador / m
__rmul__ = __mul__
__radd__ = __add__
def __repr__(self):
return self.__str__()
def __str__(self):
return "%d/%d" % (self.numerador, self.denominador)
def mcd(m,n):
"devuelve el máximo común denominador de dos enteros"
if m % n == 0:
return n
else:
return mcd(n,m%n)