¡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

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
12 Hrs
24 Min
15 Seg

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?

⚠️ 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