Python - Ayuda con ejercicio

 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 482 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con ejercicio

Publicado por Marco (4 intervenciones) el 16/06/2021 17:01:48
Hola buenas, quería consultarte si me puede ayudar a entender el código:
1) la función "distance" me devuelve un int y un booleano, pero no entiendo como aplica a eso al return de la función nearst_value.
2) Cuando dice value, esta tomando los valores que hay dentro de set?
3) key=distance, devuelve el int del primer return?
4) El return de la funcion nearest_value, toma cada valor del set, y lo compara con el valor del return de arriba?
1
2
3
4
5
6
7
def nearest_value(values: set, one: int):
    def distance(value):
        return abs(value - one), value > one
    return min(values, key=distance)
 
 
nearest_value({4, 9, 10, 11, 12, 17}, 20)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda con ejercicio

Publicado por tincopasan (1082 intervenciones) el 16/06/2021 23:31:02
Bueno, no soy bueno para explicar y lo peor es que no me interesa hacerlo, así que lo haré dentro de mis niveles

1
2
3
4
1) la función "distance" me devuelve un int y un booleano, pero no entiendo como aplica a eso al return de la función nearst_value.
2) Cuando dice value, esta tomando los valores que hay dentro de set?
3) key=distance, devuelve el int del primer return?
4) El return de la funcion nearest_value, toma cada valor del set, y lo compara con el valor del return de arriba?

1 el valor booleano es totalmente innecesario, es como si fuese lo devuelto
value: int o sea 4:16 9:11 etc

2 si toma cada elemento con la variable value

3 si asociado a la clave values

4 practicamente si

saqué el valor booleano para que veas que funciona igual:

1
2
3
4
5
6
def nearest_value(values: set, one: int):
   def distance(value):
      return abs(value - one)
   return min(values, key=distance)
 
print(nearest_value({4, 9, 10, 11, 12, 17,4,9}, 20))


Ahora bien, el código evidentemente no es tuyo, lo que me lleva a:
Si solo lo queres entender pone un print en las partes que tengas dudas con los valores que queres saber
En lo personal si bien es funcional y no crea un diccionario, es un método limitado justamente por eso.

1
2
3
4
5
def nearest_value(values,one):
    dic={x:abs(x-one) for x in set(values)}
    return min(dic, key = lambda k: dic[k])
 
print(nearest_value({4, 9, 10, 11, 12, 17,4,9,21},20))

Acá creo un diccionario con comprensión de diccionarios, lo cual después con pocas modificaciones puedo hacer muchas otras operaciones. Este caso es una reprensentación del tuyo, pero ya que había un booleano no usado lo hago en otro

1
2
3
4
5
def nearest_value1(values,one):
    dic={x:abs(x-one) for x in set(values) if x < one  }
    return min(dic, key = lambda k: dic[k])
 
print(nearest_value1({4, 9, 10, 11, 12, 17,4,9,21},20))

¿cuál es la diferencia? tanto en el tuyo como en el primero si hay un valor mayor a 20 como 21 devolverá eso, en cambio en el segundo ignora todos los valores mayores a 20

perdón por no ser más claro, me es imposible.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 482 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con ejercicio

Publicado por Marco (4 intervenciones) el 19/06/2021 16:52:50
Primero que nada, muchas gracias por la respuesta tan completa.:
1)Efectivamente el código no es mío, hice un curso de Python, y estoy haciendo ejercicios que encontré en la web oficial. Con este código, que es la solución, la verdad no lo entendía, y ponía print, para tratar de entenderlo y me daba error tras error, por eso acudí acá.

2) La consiga del ejercicio:
https://py.checkio.org/es/mission/nearest-value/

3) Todavía no tengo muy en claro la función "lambda", pero voy a profundizar sobre eso, para comprender bien el código. Nuevamente muchas gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 482 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con ejercicio

Publicado por Marco (4 intervenciones) el 19/06/2021 17:41:40
Disculpa nuevamente, te consulto:
el return del código que me pasaste, que valores toma k?, o de donde sale k?

1
2
3
def nearest_value(values,one):
    dic={x:abs(x-one) for x in set(values)}
    return min(dic, key = lambda k: dic[k])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda con ejercicio

Publicado por tincopasan (1082 intervenciones) el 20/06/2021 00:31:16
k es por definir una variable, puede ser cualquiera, es como cuando haces for x etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar