codingupmyfuture / bootcamplinuxpython

MIT License
131 stars 19 forks source link

Duda punto 2 taller 3 Listas #49

Closed joamza closed 1 year ago

joamza commented 1 year ago

Buenos días, tengo la siguiente inquietud frente al resultado del taller 3

en el punto 2

la respuesta de control indica que el resultado esperado es: image

mi duda es por que los últimos 7 ítems esperados son image si el taller indica que: Para el ultimo cuarto de la lista solo tomar los elementos en posiciones pares, al observar la ultima grafica, el ultimo cuarto de la lista los elementos en posiciones pares serian :

image

image

Elioric commented 1 year ago

La lógica con la que lo veo es que el cuarto cuarto de lista si lo separas de la lista original, su primer elemento empieza en el índice cero (0) que es un número par, image pero en la lista original, el número 46 se encuentra en lista[45] que es un índice impar, por lo cuál no estaría tomando el valor que corresponde a índices pares en la lista original. Aquí, los índices pares corresponden a elementos impares. image

NOTA: Aún así, me genera duda para el caso donde la lista pasada es list(range(1,50,1)) debido a que 50 no se puede dividir en cuartos exactos y en la respuesta de control se ignoran los valores 37 y 38 de la lista ya que quedan fuera de los últimos 50/4 elementos.

melenabelt commented 1 year ago

El ejercicio está mal formulado. Si tenemos una lista con los números del 1 al 60 el último cuarto empieza en 46 y según la máquina el 0 es par, así que los índices pares de ese último cuarto serían 46, 48, 50... El problema está en que cuando la lista está del 1 al 50 según la máquina el primer número es 40 cuando claramente siguiendo la misma lógica debería ser 38.

keljozap commented 1 year ago

Chicos buenas tardes. El ejercicio dice "Dada una lista de N >= 50 elementos", nunca dice que sean los primeros 50 números, de hecho dice N>= 50, es decir son 50 elementos, que pueden ser los primeros 50 números naturales, los primeros 50 números pares, etc.

Para el último cuarto de la lista se indica "Para el ultimo cuarto de la lista solo tomar los elementos en POSICIONES PARES. No dice, los números pares, dice posiciones pares. Esto puede hacerse usando rebanado de listas.

Lo que yo recomiendo es separar la lista original en 4 listas (4/4) y con cada una de esas listas resultantes trabajar cada uno de los puntos sin tomar en cuenta para algo adicional la lista original.

melenabelt commented 1 year ago

si la lista está con los números del 1 al 60 los cuartos son:

  1. 1 al 15
  2. 16 al 30
  3. 31 al 45
  4. 46 al 60

Teniendo en cuenta esto, la respuesta correcta del código dice que debería dar como resultado: 47, 49, 51, 53, 55... (tomando los índices IMPARES)

46 47 48 49 50 51... 0 1 2 3 4 5 6

image

Si hacemos el mismo ejercicio con una lista de 50 elementos, sería así:

  1. 1 al 12
  2. 13 al 24
  3. 25 al 36
  4. 37 al 50

Por tanto, la respuesta correcta debería ser : 38, 40, 42, 44, 46, 48 y 50 y no 40, 42, 44, 46, 48, 50

37 38 39 40 41 42 ... 0 1 2 3 4 5

image

Puntos/conclusiones importantes:

Elioric commented 1 year ago

La respuesta según el código usando la lista de 50 elementos estaría empezando en el índice 2, dejando por completo los índices del 0 al 1 correspondientes a 37 y 38

La razón por la que está dejando por fuera al 37 y al 38, es porque no se encuentran entre los últimos 12 números de la lista. Prácticamente está tomando el último slice como lista[-12:] que corresponden a los últimos 12 números de la lista, esto excluye al 37 y al 38. La lista de cuarto final queda [39,40,41,42,43,44,45,46,47,48,49,50]... Por eso representa un conflicto el hecho de que los cuartos de una lista de longitud 50 correspondan en longitudes de 12 + 12 + 12 + 14

Conclusión:

juli-amezquita commented 1 year ago

Hola compañeros, yo estoy de acuerdo con @melenabelt

Si tomamos en cuenta la teoría de slicing (rebanada) de listas de python mi_lista[inicio,fin]: (1) el índice de inicio es inclusivo (se incluye en la rebanada), (2) el índice de fin es exclusivo (el elemento en este índice no se incluirá en la rebanada) y (3) la cuenta debe empezar desde 0.

Teniendo en cuenta la lista que nos entregaron en el ejercicio (desde 1 hasta 60), los cuartos de lista estarían compuestos por 15 elementos y quedarían conformados de la siguiente manera:

Captura de Pantalla 2023-08-23 a la(s) 4 22 01 p m

Entonces tomando el último cuarto de la lista, las posiciones pares serían las de color amarillo:

image

Por ende, la respuesta correcta a lo que nos piden, sería la siguiente y no como está en el pdf, ya que para el último cuarto de lista, el ejercicio nos pide las posiciones o los índices pares:

Captura de Pantalla 2023-08-23 a la(s) 6 17 15 p m

image

De la misma manera, para la segunda lista con la que valida el bot (desde 1 hasta 50), los cuartos de lista estarían conformados por 12 elementos (teniendo en cuenta que hacemos una división entera), excepto para el último cuarto:

Captura de Pantalla 2023-08-23 a la(s) 4 36 12 p m

Entonces, para este caso, si tomo el último cuarto de la lista, las posiciones pares serían las que están resaltadas en amarillo:

Captura de Pantalla 2023-08-23 a la(s) 5 22 48 p m

Por ende, la respuesta correcta a lo que nos piden (“para el ultimo cuarto de la lista solo tomar los elementos en posiciones pares”), sería la siguiente y no como está en el pdf:

Captura de Pantalla 2023-08-23 a la(s) 5 25 44 p m

Captura de Pantalla 2023-08-23 a la(s) 5 35 03 p m

EstebanaOrozco commented 1 year ago

Hola, tengo el mismo problema que todos, considero que la aclaración de @codingupmyfuture @luisvasv-teck es urgente. Por mí lado apoyo la forma en que lo ve @Elioric , lo importante es la posición orginal de la lista y no el item ni la nueva posición que toma al hacer el slicing, sin embargo bajo esta lógica es imposible que el código funcione para los dos casos que prueba el bot, por que tal como lo decía @Elioric en su segundo aporte el control bota 2 items en su respuesta cosa que no tiene lógica alguna bajo las reglas que propone el ejercicio.

Elioric commented 1 year ago

@juli-amezquita lo que dices que cada rebanada de lista empieza en 0 y que 0 es un número par, es cierto. Sin embargo, en la lista original, cada cuarto a excepción del primero comienza en un índice impar. Por lo tanto en la lista original, lo elementos impares se encuentran e índices pares.

image [Imagen 1] Los índices están con respecto a la lista original y no a la lista rebanada, ya que nos interesa es la lista en su totalidad.

La lógica anterior no aplica para listas de longitud Len%4 != 0 (longitudes que no son divisibles entre 4 de forma entera, como es el caso de la lista de longitud 50)

image [Imagen 2] Ejemplo de lista no divisible entre 4, sobran elementos

El ejercicio debe ser revisado como dice @EstebanaOrozco, puesto que no habría una respuesta universal según lo que hemos estado planteando en éste hilo.

melenabelt commented 1 year ago

Ya logré llegar al resultado esperado, pero igual importante recalcar que no se están tomando los índices pares como dice el enunciado sino los impares como muestra Control.

EstebanaOrozco commented 1 year ago

Y nos vas a explicar cómo @melenabelt ?

edallanpoe commented 1 year ago

Cordial Saludo,

Con respecto a las dudas frente a las dudas generadas por el ejercicio:

  1. El enunciado del ejercicio está solicitando trabajar con las posiciones de los elementos image En este caso los elementos no son de interés para el ejercicio, solo las posiciones de la lista.

  2. Acorde con el primer punto de esta explicación, se tiene como parametro de entrada lista = mas o 50 elementos, para ésta explicación se utiliza la lista de 50 elementos image Tienen que tener en cuenta que sí bien los elementos son del 1 al 50, no es de interés para la solución ya que se tienen 50 elementos con posiciones 0 a 49, son las cualidades de las listas que dictan que la primera posición de toda lista comienza en 0.

  3. Con respecto a la partición de la lista en 4 cuartos, por lo tanto se puede hacer de varias formas: image Como se observa en la imagen se hacen 3 operaciones distintas para obtener la longitud del cuarto, teniendo que todas dan el mismo resultado, por el redondeo que hace la conversión a int del float resultante de la división, la propiedad de los int dicta que cuando se realiza una conversión de float a int no se redondea a 0, se corta el valor hasta donde esté la coma flotante o mejor dicho se ignora el valor del decimal.

¿Por qué se tiene que utilizar un int para determinar la longitud del cuarto? Porque los slices en lista solo permite especificar la posiciones en enteros, de lo contrario se genera una excepción:

image
  1. Una vez obtenida la longitud del cuarto, en ningún momento en el ejercicio se solicita que explicitamente se debe cubrir toda la lista o que se utilicen longitudes disparejas cuando el numero resultante en los cuartos no es exacto, por lo tanto es inferible que se debe trabajar con 4 porciones de la lista de igual longitud.

Se explica correctamente en este comentario: Elloic

  1. con respecto al punto 4 del ejercicio, se solicita que se trabaje con el último cuarto, por lo que se entiende que sí la longitud del cuarto es 12, se debe trabajar con las últimas 12 posiciones de la lista, no con las posiciones que le siguen al tercer cuarto. image Se aclara que para efectos del ejemplo mostrado en la imagén se utiliza la lista de 50 elementos.

  2. Continuando con el punto 4 del ejercicio, luego de obtener el último cuarto, es correcta la logica expresada en los comentarios:

Demostración de la lógica image

Se corrige la lógica del punto 4 del ejercicio y se enviará nuevamente el notebook a los estudiantes.

Dicho lo anterior...

Felicitaciones y muchas gracias a quienes se toman la tarea de explicarles a los demas estudiantes, y resaltar cuando los ejercicios tienen errores.

Se corregirá y se volverá a enviar en el menor tiempo posible.