« first day (1425 days earlier)      last day (1687 days later) » 

7:00 PM
@LucasDamian luego igualas con la segunda recta y hallas k
 
claro
Asi lo tengo:
-5 = 3/2 X + 7/2
7/2 lo saqué con la ecuación punto pendiente, ya que 3/2 es la pendiente, hice:
2= 3/2*(-1)+B
 
@LucasDamian correcto, yo me expresé mal, no quise decir ecuación punto pendiente, realmente quería decir ecuación de la pendiente. Es igualar ambas ecuaciones. y listo. Despejas y sale, el resultado es correcto.
 
Gracias, lo caché.. caché != caché
 
@LucasDamian (1 - (-2)) / (3 - 1) = (-5 -2) / (k + 1) y de allí despejas K, es todo.
 
fabuloso, -17/3 :-D
 
7:26 PM
@MauricioContreras
el operador ~~
en js para q se utiliza
Invierte los bits del operando.
 
@IsraelGonzález el operador ~ solo invierte los bits, pero si lo usas 2 veces vuelves a invertirlos
 
y como se usaria
 
> ~10
-11
> ~~10
10
>
@IsraelGonzález depende para qué lo vayas a usar
@IsraelGonzález ¿qué deseas lograr?
 
oh ya veo depende de su reprecentacion binaria
es eso
ej: 0010 = 3 ~ 0100 = 4
no
 
@IsraelGonzález te falta invertir el bit del signo
 
7:38 PM
-4
hice un ejercicio y vi una solucion usando este operador
y me causo duda aun no veo claro el uso mira es esta
function deleteNth(arr, n) {
let objeto = {};
return arr.filter(num => (objeto[num] = ~~objeto[num] + 1) <= n)
}
 
@IsraelGonzález para números siempre piensa que ~x aplica -(x+1)
 
mira a ver si entiendes q hace esta funcion
 
@IsraelGonzález haberle cambiado el nombre, así es trampa. Es como preguntar ¿de qué color es el carro blanco?
 
ggg
pero bueno cual es el uso del operador
pq no con ==
o otra cosa pq hacer esta inversion(q no es inversion pq queda = el num no?)
y es curioso q con el === no funciona
 
@IsraelGonzález analicemos esto, en primer lugar objeto es un objeto vacío, por lo tanto objeto[x] siempre devuelve undefined para cualquier elemento x que se le pase como clave.
@IsraelGonzález como JS es peculiar, puedes hacer ~undefined y te devolverá 0
 
7:50 PM
ya luego ~otra vez para poner el numero q me interesa
 
@IsraelGonzález si, el segundo transforma el 0 en -1
@IsraelGonzález pero luego le sumas 1, por lo tanto queda en cero
Así estás agregando 1 como valor de la clave que estás declarando con objeto[num]
 
en python uso el ~ para hacer algo como esto..:
df[~df.set_index(['id_producto']).index.isin(q_productos.set_index(['id_producto']).index)]

y lo que hace es buscar los productos de A que no esten en B. y si le quito el ~, me muestra los productos de A que estan en B. A=df y B=q_productos
 
@LucasDamian si claro, es el Not Lógico
 
Anonymous
@MauricioContreras tsssss, tsssss, quiere una rueda de coxe?
 
8:01 PM
@AsieR_2 jaja
 
Anonymous
@IsraelGonzález a la 3º va la vencida jajaja
 
@MauricioContreras aun no me queda claro
 
@IsraelGonzález ¿qué cosa? el uso en esa función?
 
no eso ya en esta funcion
es q estoy traceando el codigo y nunca queda como 0
pone directamente 1
 
@IsraelGonzález disculpa nuevamente:
> ~undefined
-1
 
8:06 PM
oh ya y luego 1
 
> ~~undefined
0
 
para este arreglo [2, 2, 3, 2, 2, 4, 1, 1, 3, 3]
 
@IsraelGonzález ~~objeto[num] + 1
 
{ '2': 1 }
{ '2': 2 }
{ '2': 2, '3': 1 }
{ '2': 3, '3': 1 }
{ '2': 4, '3': 1 }
{ '2': 4, '3': 1, '4': 1 }
{ '1': 1, '2': 4, '3': 1, '4': 1 }
{ '1': 2, '2': 4, '3': 1, '4': 1 }
{ '1': 2, '2': 4, '3': 2, '4': 1 }
 
@IsraelGonzález esto: ~~objeto[num] da cero, y luego le estás sumando 1.
30 mins ago, by Israel González
function deleteNth(arr, n) {
let objeto = {};
return arr.filter(num => (objeto[num] = ~~objeto[num] + 1) <= n)
}
 
8:11 PM
y objeto[x] = 1 ReferenceError: x is not defined
objeto['x'] = 1 objeto[1] = 1
 
Anonymous
@MauricioContreras eso es JS?
 
@AsieR_2 si
 
Anonymous
@MauricioContreras y esto qué es ~~?
 
lee arriba
en eso estaba yo
 
8:26 PM
que bonito cuando la recursion viene a ti sola y encuentras la solucion mas rapida y sencilla con ella
function digital_root(n) {
let reduccion = `${n}`.split('').map(n => +n).reduce((a, b) => a + b)
return reduccion > 9 ? digital_root(reduccion) : reduccion
}
 
@AsieR_2 Doble negación lógica
 
Anonymous
@MauricioContreras ajá
 
@AsieR_2 que bueno que lo pilles
 
Anonymous
@MauricioContreras ajá
 
@AsieR_2 ajá
 
Anonymous
8:30 PM
@IsraelGonzález sí, te entiendo, es un punto de vista interesante
 
@AsieR_2 A ver, ~ es el operador lógico NOT. Lo que hace es tomar los bits uno a uno e invertirlos (negarlos), así, un grupo de bits dados: 0101, se convierte en 1010, sin embargo hay que tener en cuenta que la representación numérica en JS incluye un bit para el signo, que también será invertido.
 
Anonymous
@MauricioContreras entonces ese es un:
 
Anonymous
 
Bueno chicos, hasta mañana. Hoy debo ir temprano a dormir, mañana voy al cole.
 
Anonymous
@MauricioContreras que aprendas mucho en plástica
 
8:34 PM
@AsieR_2 no se me da, fíjate. Y no es invento, realmente no se me da. Reprobé 1ro de ESO en Venezuela por esa materia. Tuve que repetir 1ero de ESO. Una vergüenza, lo sé. Pero qué le vamos a hacer.
Hasta mañana. O/
 
Anonymous
@MauricioContreras aquí no puedes repetir por eso xd
 
Anonymous
te dejo libre
 
@MauricioContreras lol
en que pais estas ahora mauricio
 
Anonymous
@IsraelGonzález ESPAÑITA
 
yo italia
hace unos meses estuve por espanna
 
Anonymous
8:36 PM
@IsraelGonzález pero eres de otro país? o italiano?
 
soy de cuba
 
Anonymous
@IsraelGonzález menudo cambio xD
 
mmm si no sabes nada
en que parte de españa estas
 
Anonymous
@IsraelGonzález norte
 
asturias , pais vasco
 
Anonymous
8:38 PM
@IsraelGonzález el 2º
 
Anonymous
@IsraelGonzález qué pasa xd
 
como es ahi por lo que se eso es el chiriquistan
 
Anonymous
@IsraelGonzález chiriqué? no te entiendo xd
 
es broma
los vascos lucharon por su independencia de españa
 
Anonymous
8:42 PM
@IsraelGonzález no te he entendido de todos modos xd
 
y algo asi consiguieron
 
Anonymous
@IsraelGonzález lo dejamos pa mañana que me voy a dormir
 
vale
que duermas bien
 
Anonymous
@IsraelGonzález eso espero :/
 
Anonymous
bye
 
9:02 PM
@JackNavaRow No comprendo la pregunta. ¿Qué tiene que ver que sean objetos para que [1] == [1]? ¿No te estarás confundiendo con [1] is [1] (que es False)?
 
9:19 PM
[1] es un objeto de tipo list que contiene una referencia a 1, que es un objeto tipo int que contiene el dato 1. El otro [1] es otra referencia a otra lista distinta, aunque contiene una referencia al mismo 1 que la primera (pero esto es una optimización de python, puedes asumir que el 1 de la segunda lista es otro entero distinto del de la primera, eso no afecta al razonamiento)
El operador is te dice si ambas referencias apuntan o no a la misma dirección [1] is [1] da False porque cada una de esas listas es una lista distinta
El operador == mira si ambas listas son de la misma longitud y compara uno a uno los elementos de ambas listas hasta encontrar uno distinto (en cuyo caso da False) o hasta concluir que todos son iguales (en cuyo caso da True). En este caso da True porque efectivamente ambas listas tienen un solo elemento y efectivamente en ambos casos ese elemento vale 1 (pues 1 == 1 es True, faltaría más)
 
9:31 PM
hasta mañana O/
 
como estas abulafia?, en mi notebook del trabajo dejé algo para preguntarte
era una funcion algo asi:
def nine(f=None) return 9 if not f else f()) algo asi
 
10:07 PM
@abulafia ahora me queda claro, aun me queda la cabeza que es un objeto, y en los otros lenguajes que he trabajado si hago == da error
falso*
 
porque en esos otros lenguajes == seguramente compare las referencias, es decir, hagan como el 'is' de pyhton, mientras que para comparar la igualdad de elementos tengas que usar algún método, tipo lista1.equal(lista2)
Python tambien hace esto último, en el fondo, pero te da una sintaxis mas amigable. Cuando en python haces a==b, el interprete mira si el objeto a implementa el método __eq__ y si es así invoca a.__eq__(b)
si no, lo intenta con b.__eq__(a), y si tampoco acaba dando error de que no son comparables
@LucasDamian ¿y la pregunta es...?
 
dentro de la funcion devuelve f()
y no comprendo como f, tiene una especie de "metodo"
 
10:23 PM
@LucasDamian f es el parámetro que recibe la función. Le puedes "invocar" poniendo f() si ese parámetro es una función. Si no, fallará
Se pueden pasar funciones como parámetro
Ejemplo:
 
pero mañana lo busco bien al còdigo, porque en teoria funcionaba de la siguiente manera..
si llamaba la funcion sin parametros, devolvía el número solo. La llamada normal era:
nine(divided_by(two()) asi
 
def hola():
   print("Que tal")
   return 3

def nine(f=None):
    return 9 if not f else f()
si haces nine() obtienes 9 como resultado
 
si haces nine(hola) obtienes 3 como resultado, y sale "Que tal" por pantalla
porque estás pasando f=hola
asi que dentro puedes hacer f(), de la misma forma que puedes hacer hola()
pero observa que haces nine(hola) y no nine(hola())
 
claro, y nine devuelve f()
 
10:26 PM
porque lo segundo invocaría hola() antes que nine() y le pasaría nine() el resultado de hola() que es un 3
y después nine fallaría al intentar 3()
@LucasDamian Eso es
pero esa implementación no es muy fina... si haces nine("Foo"), fallará
al intentar "Foo"() que no puede hacerse pues no puedes "invocar" una cadena
yo habría hecho return f() if callable(f) else 9
callable(f) es una primitiva del lenguaje que te da True si el objeto f puede ser invocado (por ejemplo, porque sea una función, pero también otros objetos pueden ser invocables si implementan el método __call__())
 
eso es para que no tire error verdad?
 
eso es. Sólo intenta f() si no va a da error porque f es invocable
en otro caso, retorna 9
 
yo lo que intente hacer era return type(f())
 
así nine("Hola") retornaría 9 en vez de romper
 
pero me decia NoneType is not callable
"creo"
 
10:30 PM
type(f()) te retornará el tipo del resultado de invocar a f
te da el error que dices si f es None
 
Aaah
 
pues f() intenta "invocar" a None, el cual no es invocable
 
total
 
igual querías decir type(f)
 
si
queria ver que tipo de dato era
 
10:31 PM
aún así, es mejor usar callable() si lo que quieres es averiguar si se puede invocar
 
o sea, intente inspeccionar ese código
cuando no entiendo como funciona, empiezo a ver los tipos de dato
encima intente buscar ejemplos, pero no sabia como se llamaba ese tipo de return
 
entiendo, pero el error fue hacer type(f()) pues f() causa una invocación de f, lo que solo puede hacerse si f es "callable"
@LucasDamian bueno, es que ese ejemplo además usa una expresión condicional
podrías haberlo escrito de este otro modo para no mezclar tantos conceptos diferentes en una sola línea
 
@abulafia el operador ternario lo acabo de aprender
 
def nine(f=None):
   if f is None:
      return 9
   else:
      return f()
@JackNavaRow En python se llama "expresión condicional". Equivale al operador ternario del C, sí
en C: a = (condicion)?v1:v2
en Python: a = v1 if condicion else v2
no es una sentencia de control, es una expresión cuyo valor depende de una condición
 
Es usual usar ese tipo de funciones? porque nunca las había visto
 
10:37 PM
@LucasDamian ¿A qué te refieres? ¿A la expresión condicional o a recibir como parámetro una función para invocarla desde dentro?
 
si
Porque no se me ocurren casos de uso. (ahora)
 
@LucasDamian ¿Sí a qué? XD. Lo segundo es bastante habitual
es lo que se llama un callback
pero también puede usarse para otras cosas. Por ejemplo la función sort() permite que le pases como parámetro además de la lista que quieres ordenar, una función
si lo haces, sort() invoca a esa función para cada elemento de la lista, y los ordena según el resultado devuelto por esa función
 
@abulafia lo lei commo operador ternario :( tendrias que hacerme un libro
@LucasDamian debes tener claro los conceptos basicos
 
def ultima_letra(palabra):
    return palabra[-1]

palabras = ["Uno", "dos", "Hola"]
print(sorted(palabras, key=ultima_letra))
@LucasDamian ^^^ Mira un caso práctico en que se pasa una función como parámetro
 
genial
 
10:42 PM
@abulafia, ejecute el ejemplo anterior, voy a tener que usar un delay de 5 segundos para copiar y pegar
 
def get_apellido(elem):
   return elem[1]

personas = [("Juan", "Lopez"), ("Angel", "Zapata"), ("Rodrigo", "Alvarez") ]
print(sorted(personas, key=get_apellido))
Otro caso típico ^^^
 
que IDE usas @JackNavaRow ?
 
vscode y atom
inicie con vscode por recomendaciones en el mismo chat
 
yo uso jupyter notebook. o a veces spyder
 
@JackNavaRow No sé si fui yo quien te lo recomendó, pero a mi VSCode me gusta mucho para Python. Y con la extensión VScode remote, se sale
 
10:45 PM
me gusta porque se puede ejecutar con shift + enter
 
@abulafia fuiste tu con Pablo Lozano
con JavaScript es una maravilla
 
@LucasDamian Si te mola Jupyter, te encantará Google Colab
 
es el notebook de google donde quieras no?
 
@LucasDamian y puedes usar tu Jupyter para cualquier otro lenguaje
el de google Colab tambien tiene las etiquetas
 
Es un Jupyter "en la nube", ya instalado y listo para ejecutarse. Que te guarda los notebooks en google drive. Y admite colaboración entre varios
y te viene con las bibliotecas típicas de procesado de datos ya instaladas (numpy, pandas, matplotlib, etc)
 
10:47 PM
me gusta
 
no es exactamente jupyter, cambian la interfaz, pero es el mismo concepto
 
@abulafia no le veo la logica a sorted(palabras, key=ultima_letra)
 
Cuando empece a trabajar, mi jefe me dijo que instale anaconda, y solo por eso, lo empece a usar. Y me llevo bien
 
el key le dices con que lo vas a ordenar?
 
@JackNavaRow sorted() devuelve la lista ordenada, pero ¿cómo comparar los elementos de la lista para saber cómo ordenarlos? Si no le pasas key, intenta comparar directamente los elementos de la lista. Si son cadenas, las ordenará alfabéticamente, si son tuplas, lo hará por su primer elemento. Si quieres cambiar el criterio de ordenación puedes pasarle en key una función
entonces sorted() llamará a esa función para cada elemento de la lista, y usará el valor retornado para comparar unas con otras
en este ejemplo por tanto usará la última letra de cada palabra para decidir cómo ordenarlas
la función que pases como key puede retornar cualquier cosa. Puede ser un entero, una cadena, lo que sea. Con tal de que sea un tipo de datos que python sepa ordenar
 
10:49 PM
lo único que no me gusta de jupyter notebook es que no me da la opción de autocompletado, pero a los golpes voy aprendiendo de a poco..
 
otro ejemplo: sorted(lista, key=len)
en este caso te ordena las palabras según su longitud, de más cortas a más largas
 
lo que costaba hacer eso en c++
 
@LucasDamian Sí que te autocompleta, pero no siempre
 
recuerdo esos metodos de ordenamiento "quick sort" "bubble sort"
madre mia
 
@LucasDamian El sorted() de python usa quicksort
 
@abulafia y yo haciendo una funcion para comprenderlo mejor
print(sorted(personas, key=get_apellido))
def ultima_letra(palabra):
    return len(palabra)

palabras = ["Uno", "dos", "Hola"]
print(sorted(palabras, key=ultima_letra))
:O ya lo vi!
 
@JackNavaRow en este ejemplo, ya que ultima_letra() retorna len(), podrías haber usado directamente key=len en vez de key=ultima_letra
y si tu función es tan simple que es un sencillo return, puedes ahorrarte definir una funciión para ello (y así te ahorras también inventar un nombre) usando una lambda
por ejemplo para ordenar por la última letra podría ser
sorted(palabras, key=lambda p: p[-1])
 
@JackNavaRow ya empezó con el pársel
 
@LucasDamian XD
 
con los df estoy usando lambda, creo que innecesariamente
 
10:57 PM
olvídate de las lambdas si son nuevas para tí. Son una forma de escribir un poco menos, pero no son imprescindibles. Puedes usar funciones "normales" como en los ejemplos anteriores
 
df['codigo'].apply(lambda x: x=x[:3])
decime que lo escribi bien
 
@LucasDamian Está bien escrito sí. Otra cosa será que haga lo que quieras
 
el codigo de 10 digitos, lo reduce a 3
 
ah, no, espera...
está mal :-)
lambda x: x[:3]
sobra el x= que pusiste dentro de la lambda
 
aaah
si, si
 
10:59 PM
@abulafia y para que colocan el igual?
lo he visto en funciones lambda
 
@JackNavaRow El igual dentro de la lambda? No creo...
el igual va a la izquierda de la lambda
 
@abulafia debe ser por alli cerca entonces ya esas funciones por ahora las copio y pego
 
para asignar esa lambda a un parámetro cuando llamas a una función (en la que estás pasando otra función --la lambda-- como parámetro)
 
acabo de ver otra cosa en python que no sabia
if 1 <= day_number <= 5:
 
# La lambda es una forma rápida de escribir una función en una sola línea
# Válida solo para funciones tan simples que retornan una expresión y
# no contienen lógica de control. Por ejemplo:

def devolver_ultimo_elemento(lista):
   return lista[-1]

# Una vez definida una función así, la puedes asignar a una variable:
a = devolver_ultimo_elemento

# Y por tanto invocarla ahora asi
a([1,2,3])    # Devuelve 3

# Lo mismo se puede hacer con una lambda y te ahorras la función
a = lambda x: x[-1]
a([1,2,3])
@JackNavaRow Ah, sí. Es muy chulo eso. Equivale a 1 <= day_number and day_number <= 5
Hala qué tarde! Hasta mañana!
 
11:04 PM
gracaias
nos leemos!
 

« first day (1425 days earlier)      last day (1687 days later) »