Citizen Code: Temporada 1 Episodio 3, dificultad para entender

Apprenti1970 Mensajes publicados 6 Fecha de registro   Estado Miembro Última intervención   -  
jee pee Mensajes publicados 31872 Fecha de registro   Estado Moderador Última intervención   -

Hola,

Al hacer una búsqueda en Internet, descubrí el sitio Citizen Code, para aprender Python, a través de juegos. Me parece bastante interesante.

He llegado al episodio 3 de la Temporada 1. "El juego del croquet", con aros que hay que colocar, si he entendido bien. El aro 8 debe moverse al 8 gris, etc... todo está desajustado en 1, creo.

He comenzado un código, al principio va bien, pero luego falla.

He aprendido el bucle de repetición for loop in range ():

No entiendo qué he hecho mal.

Además, el código solo puede contener 10 bloques.

No pido que me den la solución, sino que me ayuden a entender mejor, a mostrarme una pista, para aclararme un poco.

Gracias a ustedes,

Vincent

8 respuestas

  1. Diablo76 Mensajes publicados 344 Fecha de registro   Estado Miembro Última intervención   140
     

    Hola,

    Si tu objetivo es aprender Python, puedes olvidar Citizen e instalar Python 3.13 (Store o desde el sitio oficial https://www.python.org/)

    El IDLE viene incluido en la instalación de Python, te permitirá dar tus primeros pasos y familiarizarte y adquirir las nociones básicas (variables, listas, diccionarios, instrucciones, condiciones, bucles, procedimientos, etc...)

    En cuanto a las formaciones, puedes encontrar una multitud en línea, especialmente en OpenClassRoom.

    Además, tienes el Swinnen, aunque no sea muy reciente, te permitirá adquirir una buena base.

    1
  2. jee pee Mensajes publicados 31872 Fecha de registro   Estado Moderador Última intervención   9 977
     

    Hola,

    ¿Está la pinza y los arcos en su posición inicial en la imagen? Porque imagino que la pinza debería estar en la posición 1, ¿no?

    Cuando miramos tu código, no apuntas lo suficientemente lejos. Estás a uno o dos pasos. Mientras que para escribir un código lo más corto posible (aquí 10 líneas), necesitas imaginar un proceso que mire más allá. En este caso, debemos hacer lo mismo 8 veces. Precisamente usamos la programación para repetir una operación básica, 8 veces, 1000 veces, millones de veces.

    Lo primero, partiendo con la pinza en la posición 1, hay que ir a la derecha, 8 veces, para estar sobre el arco 8. Luego hay que definir todas las manipulaciones para tomar el arco, moverlo a la derecha, colocarlo, y finalmente moverse hacia la izquierda, 2 veces, para estar sobre el arco n-1 (la primera vez el 7). Entonces deberías tener las instrucciones para crear una secuencia que se ejecute 8 veces para los 8 arcos.


    0
    1. Apprenti1970 Mensajes publicados 6 Fecha de registro   Estado Miembro Última intervención  
       

      Hola,

      La posición de inicio está bien por encima del 8. Como en la captura de pantalla.

      Me dieron la solución, lo intenté y funciona. Sin embargo, he intentado entender pero tengo dificultades. No estoy seguro de que este código de ciudadano sea la solución ideal para aprender. Sin embargo, tengo ganas de aprender y no encuentro un sitio válido. Para empezar, uno gratuito habría estado bien. Entender los fundamentos, con pequeños ejercicios.

      Gracias por todas sus explicaciones. Aquí está el código que me dieron.

      Que tenga un buen día,

      Vincent

      0
  3. jee pee Mensajes publicados 31872 Fecha de registro   Estado Moderador Última intervención   9 977
     

    Este código corresponde a lo que te había indicado. Si miras bien, también es lo que habías comenzado a hacer. Excepto que te habías ido por escribir instrucciones para cada arco, uno por uno. Solo te faltaba implementar la repetición 8 veces de lo que es la misma secuencia. Revisa tu código y compáralo con la solución, solo falta el bucle Loop(8).

    Estos ejercicios tienen como objetivo hacerte entrenar en una reflexión algorítmica, con un pequeño robot muy simple. Debes definir las acciones básicas, con un soporte visual, y la limitación del número de líneas te obliga a reflexionar sobre un conjunto de líneas a repetir, a usar lo mismo varias veces. Estos son los principios de la recursividad, indispensable en programación.

    Cuando codificamos un programa, no tenemos al pequeño robot, todo ocurre en nuestra cabeza, donde intentamos hacer funcionar el programa. Y si se complica, dibujamos un organigrama para representar las acciones a realizar.

    Estos primeros ejercicios están diseñados para llevarte a pensar en cómo organizar las operaciones de un programa. Después, creo, tendrás clases para aprender las instrucciones de Python, definir variables y sus valores, entradas, salidas, condiciones.

    La mayoría de las formaciones deben comenzar por las instrucciones de Python e ir incorporando poco a poco la algorítmica. Allí el curso propone ver la programación más allá de las instrucciones en sí.


    0
    1. Apprenti1970 Mensajes publicados 6 Fecha de registro   Estado Miembro Última intervención  
       

      Sí, me lo explicaste. Es cierto que estos pequeños ejercicios están bien hechos. Con respecto al código en cuestión, no entendí por qué el segundo bucle for en range está indentado, mientras que el primero no lo está.

      Además de citizen code, estoy tratando de encontrar un buen canal de youtube para principiantes en python y/o un buen sitio web.

      Gracias por todo el tiempo que te tomas para responderme. Es amable de tu parte.

      Si me permites, me gustaría decirte que me gusta tu cita al final de la respuesta "un extraño, es un amigo que aún no hemos conocido".

      Que tengas un buen día,

      Vincent

      0
  4. jee pee Mensajes publicados 31872 Fecha de registro   Estado Moderador Última intervención   9 977
     

    La indentación, ¡excelente observación, excelente pregunta!

    En la mayoría de los lenguajes, el formato solo tiene el propósito de facilitar y hacer agradable la lectura del código. En Python, es un componente primordial del lenguaje. Sirve para determinar un bloque que constituye un conjunto de instrucciones relacionadas con una instrucción, una condición.

    Un bloque (*) comienza con una línea de instrucción que termina con: Todas las líneas de instrucción de este bloque tendrán una indentación (al menos un espacio, pero convencionalmente 4 espacios) respecto a la línea que crea el bloque. Todas las instrucciones de este bloque estarán alineadas con la misma indentación. El bloque termina cuando la indentación, respecto a la instrucción original, ya no está presente.

    Por ejemplo

    tomar() for loop in range(2): derecha() poner()

    o 2 bloques independientes

    tomar() for loop in range(2): derecha() poner() for loop in range(3): izquierda()

    Pero un bloque puede contener otro bloque. En este caso, las líneas del segundo bloque tienen su propia indentación respecto a su instrucción original. Y una doble indentación respecto al bloque padre. Y si hay varios niveles de anidamiento de bloques, tanta indentación como bloques anidados.

    Aquí, el primer for loop está en el nivel principal del programa, en la raíz, es un inicio de bloque. El segundo está indentado porque está dentro del bloque del primero, las instrucciones de este segundo bloque están indentadas respecto al segundo for loop.

    for loop in range(8): tomar() derecha() poner() for loop in range(2): izquierda()

    En otros lenguajes, para especificar estos bloques se utilizan las llaves { }, con diferentes posibilidades de escritura como

    for loop in range(2) { derecha() } for loop in range(2) {derecha()} for loop in range(2) { derecha() }

    (*) en el sitio Citizen Code, el término bloque (en un máximo de 10 bloques) se utiliza para lo que yo llamo línea, siendo el bloque un conjunto de líneas.


    0
  5. Apprenti1970 Mensajes publicados 6 Fecha de registro   Estado Miembro Última intervención  
     

    Empiezo a asimilar.

    Dicho esto, ¿cómo saber que un nuevo bloque se anidará dentro del bloque inicial y, por lo tanto, que este nuevo bloque estará indentado al primero...?

    ¿En qué caso lo estará (indentado al primer bloque) y en qué caso no lo estará? No sé si mi pregunta es clara.

    No sé si conoces el sitio Citizen Code. Para que entiendas lo que he aprendido. Aún no he comenzado el siguiente ejercicio, por miedo a confundirme.

    Por ejemplo, no me parece haber visto en Citizen Code que un bloque de instrucciones pudiera estar indentado a otro.

    Lo que no entendí en tu último mensaje es la noción de "espacio". Hablas en un momento de "4 espacios".

    Gracias a ti,

    Que tengas un buen día,

    Vincent

    0
  6. jee pee Mensajes publicados 31872 Fecha de registro   Estado Moderador Última intervención   9 977
     

    ¿cómo saber si un bloque se incrustará en el bloque inicial y, por lo tanto, que este nuevo bloque estará indentado al primero?...
    no me parece haber visto en Citizen Code que un bloque de instrucciones pueda estar indentado a otro.

    La pregunta no se plantea en esos términos. Hay instrucciones que tendrán un conjunto de líneas de instrucciones que les serán asociadas, lo que da un bloque de líneas dependiente de la instrucción inicial. Entre estas instrucciones están, en particular, los bucles y condiciones (el for, el while, el if). Por lo tanto, cada vez que se presente una de estas instrucciones, las líneas detrás deben estar indentadas con respecto a la instrucción que crea el bloque; si esa instrucción ya estaba indentada, llegaremos a un segundo nivel de indentación. Un for con un tercer nivel de indentación agregará un nuevo nivel de indentación.

    Indentar el código consiste en introducir espacios también llamados blancos al principio de la línea. Un solo blanco es suficiente. Pero para ser realmente claro sobre la estructura del código, se recomienda poner 4.

    Hace varios meses, tras una pregunta como la tuya planteada en el foro, fui a Citizen Code (o quizás FutureEnginer, los 2 parecen estar relacionados) para hacer algunos ejercicios y entender qué era este sitio. Porque cuando nos dan un código como este diciendo que es Python y que hay que encontrar un error, hay motivos para ser escéptico.

    for loop in range(8): tomar() derecha() poner() for loop in range(2): izquierda()

    La única instrucción real de Python presente es el for. El resto (tomar, derecha, izquierda, poner) son funciones, desarrolladas para controlar el robot, que están en la biblioteca "robot" importada al principio del programa; tienen un nombre significativo en el contexto, pero también podrían ser A, B, C y D. Que nunca encontrarás en un curso puro de Python. Por eso te dije que en este sitio primero aprendes el razonamiento y la lógica de la programación, antes de ver en detalle las instrucciones del lenguaje.


    0
  7. Apprenti1970 Mensajes publicados 6 Fecha de registro   Estado Miembro Última intervención  
     

    Hola,

    No entiendo todo, pero ya empieza a ser un poco más fluido en mi mente.

    Creo haber entendido que el lenguaje python es un lenguaje de claridad, que necesita ser aireado. Tanto por la comodidad visual como por su lectura.

    Para asegurarme de hacer bien las cosas, paralelamente, me gustaría instalar python en mi pc, pero ¿cuál? Uso Windows 11, con Firefox. Pero también he oído hablar de python para descargar, luego hay un idle, y es en este último donde se debe escribir el código. ¿Por qué no simplemente instalar el idle entonces...

    Además, muchos hablan de Visual Studio Code. Estoy un poco perdido con todos estos nombres. No sé qué hacer y qué no hacer.

    A largo plazo, tengo una ambición: Quisiera crear un software de genealogía gratuito. Porque sí, me gusta la genealogía, de hecho, estoy haciendo la mía. ¡No tengo absolutamente ninguna idea de cómo proceder! Pero es una ambición. Imagino que es posible.

    Gracias por el tiempo que me dedican. Imagino que Python no tiene secretos para ustedes...

    Que tengan un buen día, bajo la lluvia, en Bélgica.

    Vincent

    Ustedes saben, estoy todavía muy lejos, pero

    0
    1. jee pee Mensajes publicados 31872 Fecha de registro   Estado Moderador Última intervención   9 977
       

      Soy un informático experimentado, pero tengo poco conocimiento de Python, que he descubierto a través de las preguntas del foro. Solo lo he utilizado para pequeños scripts. Tengo la versión básica: https://www.python.org/downloads/ el instalador independiente python-3.14.0-amd64.exe. Con ello viene IDLE, que es un entorno de desarrollo minimalista, edición de código y ejecución. Hay otros entornos más sofisticados, no los conozco, quizás otro participante pueda darte información.

      Con la voluntad de desarrollar una aplicación, es importante seguir una formación en su totalidad.

      0
  8. Apprenti1970 Mensajes publicados 6 Fecha de registro   Estado Miembro Última intervención  
     

    Hola,

    Openclassroom, está anotado. Creo que sí, que dominar los términos exactos y la teoría sería la base.

    Gracias por la información, gracias por el libro.

    Vincent

    0