隆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 - Encapsula datos de los usuarios

39/56

Aportes 24

Preguntas 0

Ordenar por:

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

o inicia sesi贸n.

Testing el c贸digo para entenderlo mejor:

usuario1 = User("Juan", 20)
usuario1.name = "Pepito"
print(usuario1.name)

 `AttributeError: property 'name' of 'User' object has no setter` 

Declare mis variables privadas con doble guion bajo (__),
por lo mismo que le铆 en la clase que 1 solo guin bajo es no es buena practica (_)
.
Lo le铆 en el conceptop de convenciones y nomeclatura:
.

Convenciones de Nomenclatura: En Python, se utilizan convenciones de nomenclatura para indicar el nivel de accesibilidad de los atributos y m茅todos de una clase. La convenci贸n m谩s com煤n es utilizar un guion bajo () al comienzo de un nombre de atributo o m茅todo para indicar que es un atributo o m茅todo privado, es decir, que no deber铆a ser accedido directamente desde fuera de la clase.++ Aunque no hay restricciones t茅cnicas para acceder a estos atributos o m茅todos, se considera una buena pr谩ctica no hacerlo Por ejemplo:++.
.
.
Entonces en el test solamente aprob贸 2 de los 6 test, y cuando veo la solucion, lo unico que varia es la conveci贸n que utilizamos que fue en mi caso 2 guiones bajos (__) y el de la soluci贸n 1 guin bajo(
)
.
Entonces me confunde un poco que en la clase nos ense帽en ambos y que 1 solo guion bajo (_) es mala pr谩ctica.
.
Este fue mi ejercicio con doble guion bajo (__)

class User:
    """Class user."""
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
        self.__friends = []
        self.__messages = []

    @property
    def name(self):
        """@Property decorator to method name"""
        return self.__name

    @name.setter
    def name(self, name):
        """@name.setter decorator to modify method name"""
        self.__name = name

    @property
    def age(self):
        """@Property decorator to method age"""
        return self.__age

    @age.setter
    def age(self, age):
        """@name.setter decorator to modify method name"""
        self.__age = age

    def addFriend(self, friend):
        """Add friend method"""
        self.__friends.append(friend)

    def sendMessage(self, message, friend):
        """Send message method"""
        self.__messages.append(message)
        friend.__messages.append(message)

    def showMessages(self):
        """Show Messages method"""
        return self.__messages

# Example 1
# usuario1 = User("Juan", 20)
# usuario2 = User("Maria", 25)
# usuario1.addFriend(usuario2)
# usuario1.sendMessage("Hola Maria!", usuario2)
# r = usuario1.showMessages()
# print(r)

# Example 2
usuario1 = User("Juan", 20)
usuario1.name = "Pepito"
print(usuario1.name)

Este es el resultado del test con doble guion hajo (__)

.
.
Este es el resultado del test con un solo guion bajo (_)

.
.
La misma soulci贸n solo cambia la convencion para los atributos ptivados. Con un solo guion bajo y con 2 guion bajo el que falla los tests.

Mi ejercicio:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

class User:
  def __init__(self, name, age):
    #Tu c贸digo aqu铆 馃憞
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []

  @property
  def name(self):
    return self._name
  
  @name.setter
  def name(self, newName):
    self._name = newName

  @property
  def age(self):
    return self._age
  
  @age.setter
  def age(self, newAge):
    self._age = newAge

  def addFriend(self, friend):
    self._friends.append(friend)
  
  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message)

  def showMessages(self):
    return self._messages
class User:
  #variables privadas name, age, friends, message
  def __init__(self, name, age):
    self.__name = name
    self.__age = age
    self._friends=[]
    self.__lstmessages=[]

  @property
  def age(self):
    return self.__age
  
  @age.setter
  def age(self, valor):
    self.__age = valor

  @property
  def name(self):
    return self.__name
  
  @name.setter
  def name(self, valor):
    self.__name = valor 
    
  @property
  def friends(self):
    return self._friends
  
  @friends.setter
  def friends(self, valor):
    #print("en dict")
    self._friends.append(valor)
  
  @property
  def lstmessages(self):
    return self.__lstmessages
  
  @lstmessages.setter
  def lstmessages(self, valor):
    #print("en mensaje")
    self.__lstmessages.append(valor)
  
  #agrega un usuario a la lista de amigos del usuario actual.
  def addFriend(self, friend):
    self._friends.append(friend)
  
  #agrega un mensaje a la lista de mensajes del usuario actual y al amigo especificado.
  def sendMessage(self, message, friend):
    self.__lstmessages.append(message)
    friend.__lstmessages.append(message)
  
  #devuelve la lista de mensajes del usuario actual.
  def showMessages(self):
    return self.__lstmessages
  

if __name__ == '__main__':
    usuario1 = User("Juan", 20)
    usuario2 = User("Maria", 25)
    usuario1.addFriend(usuario2)
    usuario1.sendMessage("Hola Maria!", usuario2)

    print(usuario1.showMessages()) #output: ['Hola Maria!']

    usuario1 = User("Juan", 20)
    usuario1.name = "Pepito"
    print(usuario1.name) #Output: "Pepito"

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

Mi soluci贸n al reto:

class User:
  def __init__(self, name, age):
    self._name = name 
    self._age = age 
    self._friends = []
    self._messages = []

  @property
  def name(self):
    return self._name

  @name.setter
  def name(self, v):
    self._name = v
  
  @property
  def age(self):
    return self._age

  @age.setter
  def age(self, v):
    self._age = v

  def addFriend(self, friend):
    self._friends.append(friend)
    pass

  def sendMessage(self, msg, toFriend):
    self._messages.append(msg)
    toFriend._messages.append(msg) 

  def showMessages(self):
    return self._messages


.
.
.
.
.
.
.
.
.
.

Mi c贸digo:

class User:
    def __init__(self, name, age):
        self._name = name
        self._age = age
        self._friends = []
        self._messages = []

    def addFriend(self, friend):
        self._friends.append(friend)
        friend._friends.append(self)

    def sendMessage(self, message, friend):
        self._messages.append(message)
        friend._messages.append(message)

    def showMessages(self):
        return self._messages

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, new_name):
        self._name = new_name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, new_age):
        self._age = new_age


.
.

class User:
    def __init__(self, name, age):
        self._name = name
        self._age = age
        self._friends = []
        self._messages = []

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, Name):
        self._name = Name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, Age):
        self._age = Age

    def addFriend(self, friend):
        self._friends.append(friend)

    def sendMessage(self, message, friend):
        self._messages.append(message)
        friend._messages.append(message)

    def showMessages(self):
        return self._messages
class Usuario:
  def __init__(self, nombre, edad):
    self._nombre = nombre # ojo hay que poner gui贸n bajo, para tener buenas practicas y saber que son datos privados
    self._edad = edad
    self._amigos = [] # lista de diccionarios Usuario
    self._mensajes = [] # lista de strings

  # creamos los m茅todos p煤blicos
  def agregarAmigo(self, amigo):
    self._amigos.append(amigo)

  def enviarMensajes(self, mensaje, amigo):
    self._mensajes.append(mensaje)
    self._mensajes.append(mensaje)

  def mostrarMensajes(self):
    return self._mensajes
  
  @property #esto es como usar get_nombre
  def nombre(self):
    return self._nombre #

  @nombre.setter # esto equivale a usar set_nombre
  def nombre(self, valor):
    self._nombre = valor

  @property
  def edad(self):
    return self._edad

  @edad.setter
  def edad(self, valor):
    self.edad = valor

usuario1 = Usuario("Juan", 20)
usuario2 = Usuario("Maria", 25)
usuario1.agregarAmigo(usuario2)
usuario1.enviarMensajes("Hola Maria!", usuario2)

usuario1.mostrarMensajes()

usuario1 = Usuario("Juan", 20)
usuario2 = Usuario("Maria", 25)
usuario1.agregarAmigo(usuario2)
usuario1.enviarMensajes("Hola Maria!", usuario2)

print(usuario1.mostrarMensajes()) # ['Hola Maria!', 'Hola Maria!']

usuario1 = Usuario("Juan", 20)
usuario1.nombre = "Pepito"
print(usuario1.nombre)

.
.
.
.
.
.
.
.
.
.
.
.
.
Mi codigo

class User:

  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []

  @property
  def name(self):
    return self._name

  @property
  def age(self):
    return self._age

  @property
  def friends(self):
    return self._friends

  @property
  def messages(self):
    return self._messages

  @name.setter
  def name(self, new_name):
    self._name = new_name

  @age.setter
  def age(self, new_age):
    self._age = new_age

  @friends.setter
  def friends(self, new_friend):
    self._friends = new_friend

  @messages.setter
  def messages(self, new_message):
    self._messages = new_message

  def addFriend(self, friend):
    self.friends.append(friend)

  def sendMessage(self, message, friend):
    self.messages.append(message)
    friend.messages.append(message)

  def showMessages(self):
    return self._messages


*
*
*
*
*

class User:
  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []
  
  @property
  def name(self):
    return self._name

  @name.setter
  def name(self, new_name):
    self._name = new_name

  @property
  def age(self):
    return self._age

  @age.setter
  def age(self, new_age):
    self._age = new_age

  def addFriend(self, friend):
    self._friends.append(friend)
  
  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message)

  def showMessages(self):
    return self._messages

Env铆o mi soluci贸n, sin embargo, aunque pas贸 las pruebas, despu茅s supe que esta necesita una correcci贸n en cuanto a como se modifican los mesajes de friend en el m茅todo sendMessage(message, friend) ya que al tratarse de una atributo privado no se debe acceder como estoy accediendo en mi c贸digo, sin贸 que, _messages debe tener un setter para poder realizar modificaciones sobre friend desde ese m茅todo.

class User:
  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []
  
  def addFriend(self, friend):
    self._friends.append(friend)

  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message)

  def showMessages(self):
    return self._messages
  
  @property
  def name(self):
    return self._name

  @name.setter
  def name(self, new_name):
    self._name = new_name

  @property
  def age(self):
    return self._age

  @age.setter
  def age(self, new_age):
    self._age = new_age

Soluci贸n 馃槃鈥
.

.
.
.
.

class User:
  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []
  
  def addFriend(self, friend):
    self._friends.append(friend)

  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message)

  def showMessages(self):
    return self._messages
  
  @property
  def name(self):
    return self._name
  
  @property
  def age(self):
    return self._age
  
  @property
  def friends(self):
    return self._friends
  
  @property
  def messages(self):
    return self._messages
  
  @name.setter
  def name(self, name):
    self._name = name
  
  @age.setter
  def age(self, age):
    self._age = age
  
  @friends.setter
  def friends(self, friends):
    self._friends = friends
  
  @messages.setter
  def messages(self, messages):
    self._messages = messages

class Usuario:
def init(self, Nombre, Edad):
self._Nombre = Nombre
self._Edad = Edad
self._Amigos = []
self._Mensajes = []

def addFriend(self, Amigo):
    self._Amigos.append(Amigo)
    
def sendMessage(self, Mensaje, Amigo):
    self._Mensajes.append({"Mensaje": Mensaje, "Amigo": Amigo})

def showMessages(self):
    Mensajes = [msg["Mensaje"] for msg in self._Mensajes]
    return Mensajes

@property
def Nombre(self):
    return self._Nombre

@Nombre.setter
def Nombre(self, Nuevo_Nombre):
    self._Nombre = Nuevo_Nombre

@property
def Edad(self):
    return self._Edad

@age.setter
def Edad(self, Nueva_Edad):
    self._Edad = Nueva_Edad


.
.
.
.
.
.
.
.
.

class User:
    def __init__(self, name, age):
        self._name = name
        self._age = age
        self._friends = []
        self._messages = []

    def addFriend(self, friend):
        self._friends.append(friend)
        
    def sendMessage(self, message, friend):
        self._messages.append({"message": message, "friend": friend})

    def showMessages(self):
        messages = [msg["message"] for msg in self._messages]
        return messages

    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, new_name):
        self._name = new_name

    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, new_age):
        self._age = new_age

Aqu铆 mi soluci贸n, me est谩 costando trabajo pero debo practicar m谩s

Aqu铆 mi soluci贸n 馃捇 馃悕


.
.
.
.
.

class User:
  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []

  # getters
  @property
  def name(self):
    return self._name
  
  @property
  def age(self):
    return self._age
  
  @property
  def friends(self):
    return self._friends
  
  @property
  def messages(self):
    return self._messages
  
  # setters
  @name.setter
  def name(self, value):
    self._name = value

  @age.setter
  def age(self, value):
    self._age = value

  @messages.setter
  def messages(self, message):
    self._messages.append(message)

  # Metodos
  def addFriend(self, friend):
    self._friends.append(friend)

  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend.messages = message

  def showMessages(self):
    return self.messages


Aqu铆 mi aporte, espero les sirva:

class User:
  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends:User = []
    self._messages=[]

  @property
  def name(self):
    return self._name
  
  @name.setter
  def name(self, new_name):
    self._name=new_name
  
  @property
  def age(self):
    return self._age
  
  @age.setter
  def age(self, new_age):
    self._age=new_age

  def addFriend(self, friend):
    self._friends.append(friend)
  
  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message)
  
  @property
  def messages(self):
    return self._messages

  def showMessages(self):
    return self.messages
class User:
    def __init__(self, name, age):
        self._name = name
        self._age = age
        self._friends = []
        self._mesasages = []

    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, name):
        self._name = name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age

    def addFriend(self, friend):
        self._friends.append(friend)
    
    def sendMessage(self, message, friend):
        self._mesasages.append(message)
        friend._mesasages.append(message)
    
    def showMessages(self):
        return self._mesasages
    
class User:
    def __init__(self, name, age):
        self._name = name
        self._age = age
        self._friends = []
        self._messages = []

    def addFriend(self, friend):
        if friend != None:
            self._friends.append(friend)

    def sendMessage(self, message, friend):
        if friend != None and message != None:
            self._messages.append(message)
            friend.messages.append(message)

    def showMessages(self):
        return self._messages

    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, name):
        self._name = name

    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, age):
        self._age = age

    @property
    def friends(self):
        return self._friends
    
    @friends.setter
    def friends(self, friends):
        self._friends = friends

    @property
    def messages(self):
        return self._messages
    
    @messages.setter
    def messages(self, messages):
        self._messages = messages
user1 = Usuario("Alice", 25)
user2 = Usuario("Bob", 30)

user1.addFriend(user2)
user2.addFriend(user1)

user1.sendMessage("Hola Bob, 驴c贸mo est谩s?", user2)
user2.sendMessage("隆Hola Alice! Estoy bien, 驴y t煤?", user1)

print(user1.showMessages())
print(user2.showMessages())


o
o
o
o
o
o

class User:

  def __init__(self, name, age):
    self._name     = name
    self._age      = age
    self._friends  = []
    self._messages = []

  @property
  def name(self):
    return self._name  
  
  @property
  def age(self):
    return self._age  
  
  @name.setter
  def name(self, name):
    self._name = name 
  
  @age.setter
  def age(self, age):
    self._age = age  

  def addFriend(self, friend):
    self._friends.append(friend)

  def getFriends(self):
    return self._friends 

  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message)
  
  def showMessages(self):
    return self._messages 

usuario1 = User("Juan",  20)
usuario2 = User("Maria", 25)
usuario3 = User("Pedro", 30)
usuario4 = User("Lina",  25)

print(usuario1.name, usuario1.age)
print(usuario2.name, usuario2.age)

usuario1.addFriend(usuario2)
usuario1.addFriend(usuario3)
usuario1.addFriend(usuario4)
print(usuario1.getFriends())

usuario1.sendMessage("Hola Maria!", usuario2)
usuario1.showMessages()


mi soluci贸n, aunqueno enitendo muy bien el uso de lo setters y getters
*
*
*
*
*
*
*
*

class User:
  def __init__(self, name, age):
    #Tu c贸digo aqu铆 馃憞
    self._name =name
    self._age=age
    self._messages = []
    self._friends =[]

  def addFriend(self,friend):
    self._friends.append(friend)

  def sendMessage(self, message, friend):
    self._messages.append(message)
    friend._messages.append(message) 
  
  def showMessages(self):
    return (self._messages)
  
  @property
  def name(self):
    return self._name

  @name.setter
  def name(self, newName):
    self._name =newName

  @property
  def age(self):
    return self._age

  @age.setter
  def age(self, newAge):
    self._age = newAge 


.
.
.
.
.


.
.
.
.
.

class User:
  def __init__(self, name, age):
    self._name = name
    self._age = age
    self._friends = []
    self._messages = []
  
  @property
  def name(self):
    return self._name
  
  @property
  def age(self):
    return self._age

  @name.setter
  def name(self, name):
    self._name = name
  
  @age.setter
  def age(self, age):
    self._age = age

  def addFriend(self,friend):
    self._friends.append(friend)
  
  def sendMessage(self,message, friend):
    self._messages.append(message)
    friend._messages.append(message)
  
  def showMessages(self):
    return self._messages
undefined