隆Te damos la bienvenida a este reto!

1

Empezando con Python desde 0

D铆a 1

2

Variables, funciones y sintaxis b谩sica

3

Tipos de datos: Numbers, Strings y Diccionarios

4

Playground - Retorna el tipo

D铆a 2

5

Operadores

6

Playground - Calcula la propina

D铆a 3

7

Condicionales

8

Playground - Averigua si un a帽o es bisiesto

9

Ciclos

10

Playground - Dibuja un triangulo usando bucles

D铆a 4

11

Listas

12

Encuentra a los gatitos m谩s famosos

13

Diccionarios

14

Obt茅n el promedio de los estudiantes

15

Tuplas

16

Obten la informaci贸n de los paquetes

D铆a 5

17

Calcula la cantidad de letras en una oraci贸n

18

Encuentra el mayor pal铆ndromo

D铆a 6

19

Sets

20

Encuentre la intersecci贸n de conjuntos

D铆a 7

21

List comprehension

22

Encuentra palabras con dos vocales

23

Dictionary Comprehension

24

Calcula la longitud de las palabras

D铆a 8

25

Funciones Lambda

26

Filtra mensajes de un user espec铆fico

27

Higher order functions

28

Crea tu propio m茅todo map

D铆a 9

29

Manejo de Errores y excepciones

30

Maneja correctamente los errores

31

Maneja las excepciones

D铆a 10

32

Playground - Crea un task manager usando closures

D铆a 11

33

Lectura de archivos de texto y CSV

D铆a 12

34

Programaci贸n orientada a objetos

35

Crea un auto usando clases

D铆a 13

36

Abstracci贸n en Python

37

Playground - Crea un sistema de carrito de compras

38

Encapsulamiento en Python

39

Playground - Encapsula datos de los usuarios

D铆a 14

40

Herencia en Python

41

Playground - Jerarqu铆a de animales usando herencia

D铆a 15

42

Polimorfismo en Python

43

Playground - Implementa un sistema de pagos

D铆a 16

44

Estructuras de datos en Python

45

Playground - Crea tu propia lista en python

46

Hash tables en Python

47

Playground - Implementaci贸n de una HashTable para Contactos

D铆a 17

48

Maps en Python

49

Playground - Crea un task manager con Maps

D铆a 18

50

Singly Linked List en Python

51

Playground - Implementaci贸n de una singly linked list

D铆a 19

52

Stacks en Python

53

Playground - Implementaci贸n de un stack

D铆a 20

54

Queues en Python

55

Playground - Implementaci贸n de una queue

D铆a 21

56

隆Lo lograste!

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Playground - Implementaci贸n de una queue

55/56

Aportes 14

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

鈿狅笍 Lee esto si t煤 c贸digo sigue la gu铆a y aun as铆 los test te arrojan errores.

Este 煤ltimo ejercicio tiene (lo que yo considero) inconsistencias en la explicaci贸n de lo que debe hacer cada m茅todo vs con lo que se espera en las pruebas.

  1. En la descripci贸n la funci贸n dequeue() dice:

Elimina y devuelve un objeto con las siguientes propiedades: { from, to, body, subject } del correo electr贸nico m谩s antiguo de la cola.

En el ejemplo del resultado que debemos obtener al llamar a dequeue nos dan el siguiente Output:

Output:
{
  'from': '[email protected]',
  'to': '[email protected]',
  'body': 'No puedo iniciar sesi贸n en mi cuenta',
  'subject': 'Problema de inicio de sesi贸n'
}

Sin embargo a la hora de correr los test siguiente lo que establece la descripci贸n del funcionamiento para el m茅todo dequeue, obtengo el siguiente error:

En la descripci贸n dice "objeto con las siguientes propiedades: { from, to, body, subject }", from no from_email.

En el c贸digo al cambiar from por from_email el error sigue apareciendo.

def dequeue(self):
    if not self.first:
      raise IndexError("No hay emails.")
  
    first_email = { 
      "from_email": self.first.from_email , 
      "to": self.first.to, 
      "body": self.first.body, 
      "subject": self.first.subject 
    }

    if self.first == self.last:
      self.first = None
      self.last = None
    else:
      self.first = self.first.next
    self.length -= 1
      
    return first_email

Lo mismo ocurre con los test para las funciones enqueue() y peek()

Esa es la inconsistencia #1 que encontr茅. La 2da:

  1. El c贸digo de la soluci贸n en las funciones dequeue() y peek() no tienen nada que ver con los mensajes de error en los test.

c贸digo de soluci贸n:

def dequeue(self):
    if self.is_empty():
      raise IndexError("La cola est谩 vac铆a")

    removed_mail = self.first # se asigna el nodo completo de first a removed_main
    if self.length == 1:
      self.first = None
      self.last = None
    else:
      self.first = removed_mail.next
    removed_mail.next = None
    self.length -= 1
    return removed_mail # No esta regresando un diccionario sino el nodo

En el c贸digo de soluci贸n retorna el nodo no un diccionario con los atributos que se especifican en la descripci贸n del ejercicio. Al momento de correr el ejemplo en lugar de obtener el output

{
  'from': '[email protected]',
  'to': '[email protected]',
  'body': 'No puedo iniciar sesi贸n en mi cuenta',
  'subject': 'Problema de inicio de sesi贸n'
}

Obtenemos como resultado la referencia en memoria del nodo:

<mail.Mail object at 0x1c19f28>


.
.

El objetivo de este comentario es que el Team Platzi corrija la descripci贸n de este ejercicio y los mensajes de los test, para que a los siguientes alumnos que lleguen hasta aqu铆 no se topen con este inconveniente y luego no sepan que esta mal en su complementaci贸n en el playground cuando en local(XD) si funciona y sigue todas las instrucciones que describe la gu铆a.

.
Si alguien se toma la molestia de leer este aporte, agradecer铆a me diera su feedback y si estoy algo incorrecto por favor me lo hagan saber.

#NuncaParenDeAprender 馃挌

from mail import Mail

class Queue:
    def __init__(self):
        self.first = None
        self.last = None
        self.length = 0

    def enqueue(self, from_email, to, body, subject):
        new_node = Mail(from_email, to, body, subject)
        if self.length == 0:
            self.first = new_node
            self.last = new_node
        else:
            self.last.next = new_node
            self.last = new_node
        self.length += 1

    def dequeue(self):
        if self.length == 0:
            raise IndexError("La queue est谩 vac铆a")
        removed_node = self.first
        if self.first == self.last:
            self.last = None
        self.first = self.first.next
        self.length -= 1
        return removed_node

    def peek(self):
        return self.first

    def is_empty(self):
        return self.length == 0

    def size(self):
        return self.length

o
o
o
o
o
o
o
o

class Mail:
  def __init__(self, from_email, to, body, subject):
    self.from_email = from_email
    self.to = to
    self.body = body
    self.subject = subject
    self.next = None
class Queue:
  def __init__(self):
    self.cabeza   = None
    self.cola     = None
    self.longitud = 0
  
  def enqueue(self, from_email, to, body, subject):
    newMail = Mail(from_email, to, body, subject)  
    if self.longitud == 0:
      self.cabeza = newMail
      self.cola   = newMail
    else:
      self.cola.next = newMail
      self.cola = newMail
    self.longitud += 1  



  def dequeue(self):
     
    if self.longitud == 0:
      raise Exception("La cola esta vacia")
    else:
      salida = {} 
      salida["from"]    = self.cabeza.from_email
      salida["to"]      = self.cabeza.to
      salida["body"]    = self.cabeza.body
      salida["subject"] = self.cabeza.subject
      auxiliar = self.cabeza
      self.cabeza = self.cabeza.next
      del auxiliar
      self.longitud -= 1 
      if self.longitud == 0:
        self.cola = None 
      return salida

  
  def peek(self):
    if self.longitud == 0:
      raise Exception("La cola esta vacia")
    else:
      salida = {}
      salida["from"]    = self.cabeza.from_email
      salida["to"]      = self.cabeza.to
      salida["body"]    = self.cabeza.body
      salida["subject"] = self.cabeza.subject
      return salida
    
  def is_empty(self):
    return self.longitud == 0
  
  def size(self):
    return self.longitud 
emailQueue = Queue()

emailQueue.enqueue(
    '[email protected]',
    '[email protected]',
    'No puedo iniciar sesi贸n en mi cuenta',
    'Problema de inicio de sesi贸n'
)

print("primer correo")
print(emailQueue.is_empty())
print(emailQueue.size())
print(emailQueue.peek())
print()



emailQueue.enqueue(
    '[email protected]',
    '[email protected]',
    'Mi pedido no ha llegado todav铆a',
    'Estado del pedido'
)

print("segundo correo")
print(emailQueue.is_empty())
print(emailQueue.size())
print(emailQueue.peek())
print()

emailQueue.enqueue(
    '[email protected]',
    '[email protected]',
    'pedido llego en mal estado',
    'Estado del pedido'
)

print("tercer correo")
print(emailQueue.is_empty())
print(emailQueue.size())
print(emailQueue.peek())
print()

print(emailQueue.dequeue())
print("proximo correo")
print(emailQueue.is_empty())
print(emailQueue.size())
print(emailQueue.peek())
print()

print(emailQueue.dequeue())
print("proximo correo")
print(emailQueue.is_empty())
print(emailQueue.size())
print(emailQueue.peek())
print()

print(emailQueue.dequeue())
print("proximo correo")
print(emailQueue.is_empty())
print(emailQueue.size())
print()

Mi soluci贸n
*
*
*
*
*
*
*
*

from mail import Mail

class Queue:
  def __init__(self):
    # Tu c贸digo aqu铆 馃憞
    self.first = None
    self.last = None
    self.length = 0   
    
  
  def enqueue(self, from_email, to, body, subject):
    # Tu c贸digo aqu铆 馃憞
    new_node = Mail(from_email, to, body, subject)
    if self.length == 0:
      self.first = new_node
      self.last = new_node
    else:
      self.last.next =new_node
      self.last = new_node     
    self.length +=1

  def dequeue(self):
    # Tu c贸digo aqu铆 馃憞  
    if self.length ==0:
      raise IndexError('La queue est谩 vac铆a') 
    removed_node = self.first
    if self.first == self.last:
      self.last = None
    self.first = self.first.next
    self.length -=1
    return removed_node  
  
  def peek(self):
    # Tu c贸digo aqu铆 馃憞   
    return self.first

  def is_empty(self):
    # Tu c贸digo aqu铆 馃憞  
    return True if self.length ==0 else False 
    
  
  def size(self):
    # Tu c贸digo aqu铆 馃憞   
    return self.length

Mi soluci贸n:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

from mail import Mail

class Queue:
  def __init__(self):
    # Tu c贸digo aqu铆 馃憞  
    self.first = None
    self.last = None
    self.length = 0 
    pass
  
  def enqueue(self, from_email, to, body, subject):
    # Tu c贸digo aqu铆 馃憞   
    newMail = Mail(from_email, to, body, subject)
    if self.length == 0:
      self.first = newMail
      self.last = newMail
    else:
      self.last.next = newMail
      self.last = newMail
    self.length += 1
    pass

  def dequeue(self):
    # Tu c贸digo aqu铆 馃憞 
    if self.length == 0:
      raise IndexError('No hay correos electronicos')
    email = self.first
    if self.first == self.last:
      self.last = None
    self.first = self.first.next
    self.length -= 1
    return email
    pass
  
  def peek(self):
    # Tu c贸digo aqu铆 馃憞   
    return self.first
    pass

  def is_empty(self):
    # Tu c贸digo aqu铆 馃憞   
    return self.length == 0
    pass
  
  def size(self):
    # Tu c贸digo aqu铆 馃憞   
    return self.length
    pass

馃洝锔忦煕★笍Escudo anti-spoilers馃洝锔忦煕★笍

Mi soluci贸n al reto:
)

# main.py
from mail import Mail

class Queue:
  def __init__(self):
    self.first = self.last = None
    self.length = 0

  def enqueue(self, from_email, to, body, subject):
    newEmail = Mail(from_email, to, body, subject)
    if self.first is None and self.last is None:
      self.first = self.last = newEmail
    else:
      self.last.next = newEmail
      self.last = newEmail
    self.length += 1

  def dequeue(self):
    if self.length == 0:
      raise IndexError("No tenemos mas correos")
    removed_mail = self.first
    if self.first == self.last:
      self.last = None
    self.first = self.first.next
    self.length -= 1
    return removed_mail 
  
  def peek(self):
    return self.first

  def is_empty(self):
    return self.length <= 0
  
  def size(self):
    return self.length


Aqu铆 mi soluci贸n

class Mail:
  def __init__(self, from_email, to, body, subject):
    self.from_email = from_email
    self.to = to
    self.body = body
    self.subject = subject
    self.next = None
from mail import Mail

class Queue:
  def __init__(self):
    self.first =None
    self.last =None
    self.length = 0
  
  def enqueue(self, from_email, to, body, subject):
    new_mail = Mail(from_email, to, body, subject)
    if self.length == 0:
      self.first = new_mail
      self.last = new_mail
    else:
      self.last.next = new_mail
      self.last = new_mail
    self.length += 1

  def dequeue(self):
    if self.length == 0:
      raise IndexError("La queue est谩 vac铆a")
    if self.first == self.last:
      self.last =None
    removed_email = self.first
    self.first = self.first.next
    self.length -= 1
    return removed_email
  
  def peek(self):
    if self.is_empty():
      raise IndexError("No hay correos")
    return self.first

  def is_empty(self):
    return self.length == 0
  
  def size(self):
    return self.length

emailQueue = Queue()

emailQueue.enqueue(
    '[email protected]',
    '[email protected]',
    'No puedo iniciar sesi贸n en mi cuenta',
    'Problema de inicio de sesi贸n'
)

emailQueue.enqueue(
    '[email protected]',
    '[email protected]',
    'Mi pedido no ha llegado todav铆a',
    'Estado del pedido'
)

email = emailQueue.dequeue()
print(email)


.
.
.
.
.
.
.
.
.
.

Mi c贸digo:

from mail import Mail

class Queue:
    def __init__(self):
        self.first = None
        self.last = None
        self.length = 0
  
    def enqueue(self, from_email, to, body, subject):
        new_mail = Mail(from_email, to, body, subject)

        if self.is_empty():
            self.first = new_mail
        else:
            self.last.next = new_mail
    
        self.last = new_mail
        self.length += 1

    def dequeue(self):
        if self.is_empty():
            raise IndexError("No hay correos")
      
        removed_mail = self.first
    
        if self.first == self.last:
            self.last = None
        self.first = self.first.next
        self.length -= 1
    
        return removed_mail
  
    def peek(self):
        if self.is_empty():
            raise IndexError("No hay correos")
        return self.first

    def is_empty(self):
        return self.length == 0

    def size(self):
        return self.length


.
.
.
.
.
.
.
.
.
.
.

Soluci贸n 馃槃鈥
.

.
.
.
.
Mail:

class Mail:
  def __init__(self, from_email, to, body, subject):
    self.from_email = from_email
    self.to = to
    self.body = body
    self.subject = subject
    self.next = None

Main:

from mail import Mail

class Queue:
  def __init__(self):
    self.first = None
    self.last = None
    self.length = 0
  
  def enqueue(self, from_email, to, body, subject):
    mail = Mail(from_email, to, body, subject)
    if self.length == 0:
      self.first = mail
      self.last = mail
    else:
      self.last.next = mail
      self.last = mail
    self.length += 1

  def dequeue(self):
    if self.length == 0:
      raise IndexError("La queue est谩 vac铆a")
    removed_mail = self.first
    if self.first == self.last:
      self.last = None
    self.first = self.first.next
    self.length -= 1
    return removed_mail
  
  def peek(self):
    return self.first

  def is_empty(self):
    return self.length == 0
  
  def size(self):
    return self.length
emailQueue = Queue()

emailQueue.enqueue(
    'jane@ejemplo.com',
    'support@ejemplo.com',
    'No puedo iniciar sesi贸n en mi cuenta',
    'Problema de inicio de sesi贸n'
)

emailQueue.enqueue(
    'joe@ejemplo.com',
    'support@ejemplo.com',
    'Mi pedido no ha llegado todav铆a',
    'Estado del pedido'
)

email = emailQueue.dequeue()
print(email)

from mail import Mail

class Queue:
  def __init__(self):
    self.first = None
    self.last = None
    self.length = 0
  
  def enqueue(self, from_email, to, body, subject):
    new_mail = Mail(from_email, to, body, subject)

    if self.is_empty():
        self.first = new_mail
    else:
        self.last.next = new_mail
    
    self.last = new_mail
    self.length += 1

  def dequeue(self):
    if self.is_empty():
      raise IndexError("No hay correos")
      
    removed_mail = self.first
    
    if self.first == self.last:
      self.last = None
    self.first = self.first.next
    self.length -= 1
    
    return removed_mail
  
  def peek(self):
    
    if self.is_empty():
      raise IndexError("No hay correos")

    return self.first

  def is_empty(self):
    if self.length == 0:
      return True
    return False

  def size(self):
    return self.length  


.
.
.
.
.

undefined