Skip to content

rescobedoq/python_ajedrez

Repository files navigation

GUÍA DE LABORATORIO
<
INFORMACIÓN BÁSICA
ASIGNATURA:Programación
TÍTULO DE LA PRÁCTICA:Python
RECURSOS:
DOCENTES:
  • Richart Smith Escobedo Quispe

Python

License Downloads Last Commit

Debian Git GitHub Vim Java

OBJETIVOS TEMAS Y COMPETENCIAS

OBJETIVOS

  • Programar usando Python.
  • Mostrar un ejemplo de separación de intereses en clases: el modelo (lista de strings) de su vista (dibujo de gráficos).

TEMAS

  • Listas
  • Ciclos
  • Programación orientada a objetos
  • ¿Programación funcional?

CONTENIDO DE LA GUÍA

MARCO CONCEPTUAL

  • https://www.w3schools.com/python/python_reference.asp

  • https://docs.python.org/3/tutorial/

  • Virtual Environment

    • La reutilización de código(paquetes, librerias, plugins, etc.) de terceros nos permite construir software más complejo.
    • NodeJS usa paquetes instalados en el directorio de trabajo y no de manera global, registrando estos paquetes en sus versiones en el archivo package.json.
    • Por eso este modo de trabajo nos permite tener distintos proyectos con distintas bibliotecas, de distintas versiones, en la misma máquina, sin que existan conflictos.
    • Para compartir el proyecto se debe compartir el archivo package.json y luego llamar a "npm install" para instalar las bibliotecas adecuadas para el proyecto.
    • Java usa ant y maven, junto con archivos xml para realizar estas tareas.
    • Python tiene virtualenv, para crear este espacio de trabajo.
    • Python utiliza el manejador de paquetes pip.
  • Utilizar Python

    • Para un instalación local en sistemas operativos MS Windows utilice: https://www.python.org/downloads/windows/

    • Tambien ud puede probar código en herramientas online: https://www.programiz.com/python-programming/online-compiler/

    • Python en Debian GNU/Linux:

      • Debian Linux viene con Python 3 y Python 2 preinstalados.
        python3 --version
        Python 3.9.2
      • Instalemos pip, una herramienta que instalará y administrará los paquetes de programación que queramos usar en nuestros proyectos de desarrollo.
        sudo apt-get install -y python3-pip
      • Paquetes y herramientas de desarrollo más para instalar para garantizar que tengamos una configuración sólida para nuestro entorno de programación:
        sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
    • Configurar un entorno virtual:

      • Los entornos virtuales permiten tener un espacio aislado en los proyectos Python

      • Garantizando que cada proyecto pueda tener su propio conjunto de dependencias que no interrumpirán a otros proyectos.

      • Manejando diferentes versiones de los paquetes. Esto es especialmente importante cuando se trabaja con paquetes de terceros.

      • Puede varios entornos de programación.

      • Cada entorno es un directorio en la que se ubicaran sus scripts.

      • Usaremos el módulo venv , que es parte de la biblioteca estándar de Python.

      • Instalemos venv escribiendo:

        sudo apt install -y python3-venv
      • Para crear un ambiente elija en qué directorio.

        mkdir -p ~/unsa/pw2/labs/lab04/my_env
        cd ~/unsa/pw2/labs/lab04/my_env
      • En el directorio crea un entorno virtual ejecutando el siguiente comando:

        virtualenv -p python3 .
        mkdir -p ~/unsa/pw2/labs/lab04/my_env/src
        cd ~/unsa/pw2/labs/lab04/my_env/src
      • Esto es lo que sucedio:

        tree -L 2 ../
        .
        ├── bin
        │   ├── activate
        │   ├── activate.csh
        │   ├── activate.fish
        │   ├── activate.nu
        │   ├── activate.ps1
        │   ├── activate_this.py
        │   ├── deactivate.nu
        │   ├── pip
        │   ├── pip3
        │   ├── pip-3.9
        │   ├── pip3.9
        │   ├── python -> /usr/bin/python3
        │   ├── python3 -> python
        │   ├── python3.9 -> python
        │   ├── wheel
        │   ├── wheel3
        │   ├── wheel-3.9
        │   └── wheel3.9
        ├── lib
        │   └── python3.9
        ├── pyvenv.cfg
        └── src
      • Ejecute el script de activación para activar el entorno virtual:

        source ../bin/activate
        (my_env) user@localhost:$
      • Cree el "Hola Mundo" en su entorno de programación:

        vim hello.py
        print("Hello, World!")
        python3 hello.py
      • Para salir del entorno virtual:

        deactivate

EJERCICIO RESUELTO POR EL DOCENTE

  • Active su entorno virtual

    source ../bin/activate
  • Ejercicios sobre matrices de tamaño NxN:

    • Determine si una matriz es escalar:

      vim esEscalar.py
      def esEscalar(m):
          d = m[0][0]
          for i in range(len(m)):
              for j in range(len(m)):
                  if i != j:
                      if m[i][j] != 0:
                          print(m[i][j])
                          return False
                  elif m[i][j] != d:
                      print(m[i][j])
                      return False
          return True
      vim test_esEscalar.py
      import esEscalar as fu
      
      def prueba(M):
          if (fu.esEscalar(M)):
              print("Si es escalar")
          else:
              print("No es escalar")
      
      #Z = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
      #Z = [[1, 2, 3], [4, 1, 6], [7, 8, 1]]
      Z = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
      
      prueba(Z)
    • Determine si una matriz es unitaria:

      vim esUnitaria.py
      import esEscalar as fu
      
      def esUnitaria(m):
          return m[0][0] == 1 and fu.esEscalar(m)
      vim test_esUnitaria.py
      import esUnitaria as fu
      
      def prueba(M):
          if (fu.esUnitaria(M)):
              print("Si es unitaria")
          else:
              print("No es unitaria")
      
      #Z = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
      #Z = [[1, 2, 3], [4, 1, 6], [7, 8, 1]]
      Z = [[2, 0, 0], [0, 2, 0], [0, 0, 2]]
      #Z = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
      
      prueba(Z)

EJERCICIOS PROPUESTOS

  • En esta tarea usted pondrá en práctica sus conocimientos de programación en Python para dibujar un tablero de Ajedrez.

  • La parte gráfica ya está programada, usted sólo tendrá que concentrarse en las estructuras de datos subyacentes.

  • Con el código proporcionado usted dispondrá de varios objetos de tipo Picture para poder realizar su tarea: Fichas de ajedrez

  • Estos objetos estarán disponibles importando la biblioteca: chessPictures y estarán internamente representados con arreglos de strings que podrá revisar en el archivo pieces.py

  • La clase Picture tiene un sólo atributo: el arreglo de strings img, el cual contendrá la representación en caracteres de la figura que se desea dibujar.

  • La clase Picture ya cuenta con una función implementada, no debe modificarla, pero si puede usarla para implementar sus otras funciones:

    • _invColor: recibe un color como un caracter de texto y devuelve su color negativo, también como texto, deberá revisar el archivo colors.py para conocer los valores negativos de cada caracter.
  • La clase Picture contará además con varios métodos que usted deberá implementar:

    1. verticalMirror: Devuelve el espejo vertical de la imagen
    2. horizontalMirror: Devuelve el espejo horizontal de la imagen
    3. negative: Devuelve un negativo de la imagen
    4. join: Devuelve una nueva figura poniendo la figura del argumento al lado derecho de la figura actual
    5. up: Devuelve una nueva figura poniendo la figura recibida como argumento, encima de la figura actual
    6. under: Devuelve una nueva figura poniendo la figura recibida como argumento, sobre la figura actual
    7. horizontalRepeat, Devuelve una nueva figura repitiendo la figura actual al costado la cantidad de veces que indique el valor de n
    8. verticalRepeat Devuelve una nueva figura repitiendo la figura actual debajo, la cantidad de veces que indique el valor de n
  • Tenga en cuenta que para implementar todos estos métodos, sólo deberá trabajar sobre la representación interna de un Picture, es decir su atributo img.

  • Para dibujar una objeto Picture bastará importar el método draw de la biblioteca interpreter y usarlo de la siguiente manera:

    $ python3
    Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
    [GCC 10.2.1 20210110] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from chessPictures import *
    >>> from interpreter import draw
    pygame 1.9.6
    Hello from the pygame community. https://www.pygame.org/contribute.html
    >>> draw(rock)

    PyGame

  • Ejercicios:

    • Para resolver los siguientes ejercicios sólo está permitido usar ciclos, condicionales, definición de listas por comprensión, sublistas, map, join, (+), lambda, zip, append, pop, range.

      1. Implemente los métodos de la clase Picture. Se recomienda que implemente la clase picture por etapas, probando realizar los dibujos que se muestran en la siguiente preguntas.

      2. Usando únicamente los métodos de los objetos de la clase Picture dibuje las siguientes figuras (invoque a draw):

        • (a) (a)

        • (b) (b)

        • (c) (c)

        • (d) (d)

        • (e) (e)

        • (f) (f)

        • (g) (g)

CUESTIONARIO

  • ¿Qué son los archivos *.pyc?
  • ¿Para qué sirve el directorio pycache?
  • ¿Cuáles son los usos y lo que representa el subguión en Python?

REFERENCIAS

Debian Git GitHub Vim Java

License Downloads Last Commit

About

Tarea sobre un tablero de ajedrez en Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages