""
Mostrando las entradas con la etiqueta Logica. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Logica. Mostrar todas las entradas

lunes, 3 de febrero de 2025

Curso virtual Python UniAndes - Coursera / 2.9 Logica vs Interacciòn

 

2.9. Lógica vs. Interacción


Objetivo de la sección

El objetivo de esta sección es presentar recomendaciones metodológicas para manejar la parte de los programas que se encarga de la interacción con los usuarios y la parte que se encarga de hacer los cálculos y otras operaciones.

Usualmente la preocupación más importante cuando se construye un programa es que sea correcto, es decir que sus cálculos y la forma en la que manipule la información que le dé un usuario sea correcta. Por ejemplo, lo más importante del sistema que manipula el dinero en un banco es que lleve correctamente las cuentas: nadie puede perder dinero, deben cobrar lo correcto por cada operación, el descuento de impuestos debe ajustarse a la ley y deben abonar los intereses correctamente calculados.

Además de la corrección, hay otras preocupaciones para tener en cuenta cuando se desarrolla un nuevo programa. Para un usuario, las preocupaciones comunes tienen que ver con la seguridad, el desempeño (qué tan rápido es el sistema) y la usabilidad (qué tan fácil de usar es). Desde el punto de vista de quien desarrolla un sistema, otras preocupaciones importantes son la escalabilidad (qué tan bien funcionará el sistema cuando tenga muchos usuarios o muchos datos), la tolerancia a fallos (cómo se comporta el sistema cuando ocurren ciertos problemas), o la interoperabilidad (qué tan fácil es que el sistema intercambie información con otros sistemas que ya existan) 1.

Sin embargo, la mayor preocupación para quien desarrolla un sistema debería ser la mantenibilidad. Esto quiere decir: qué tan fácil es hacerle un cambio a un sistema (ej. agregarle alguna funcionalidad, corregir algún error, mejorar su apariencia). Cuando se está aprendiendo a programar puede parecer que esta no es una cuestión importante y que lo prioritario son la corrección y el desempeño. La realidad es que una vez se empieza a usar un programa, siempre es necesario hacerle modificaciones, especialmente cuando es muy exitoso. Sólo piense en la cantidad de actualizaciones que tiene que instalar permanentemente en su computador o en su celular: con casi total seguridad usted no está utilizando la primera versión (1.0) de ninguna aplicación 2.

La pregunta natural que debería surgir es entonces: ¿cómo logramos que un programa sea mantenible? Ya en este capítulo discutimos la primera recomendación: documentando el código. Cuando el código está documentado es más fácil que otros programadores o nosotros mismos podamos hacer mejoras o correcciones a nuestros programas.

La segunda recomendación es incluso más importante: estructurando el programa de tal forma que sea fácil de entender. Esto significa que queremos que sea fácil entender cómo está organizado para que cuando haya un error sea fácil encontrar donde se debería corregir, o para que cuando se quiera agregar nuevas funcionalidades no se necesite una gran reestructuración.

Es posible que en este momento sea difícil para usted imaginarse la complejidad de un gran desarrollo porque hasta ahora sólo ha trabajado con pequeños programas. Con el tiempo se dará cuenta que las recomendaciones para organizar sus programas son tremendamente valiosas y que le ahorrarán mucho trabajo en el futuro. Acostúmbrese a estructurar bien sus programas mientras sean pequeños, para que sea natural hacerlo cuando sean grandes.

En esta sección estudiaremos una primera técnica para propiciar la mantenibilidad de los programas. Incidentalmente, para explicar esta técnica tendremos que introducir el concepto de módulo en Python. 
 

2.9.1. Separación de la lógica y la interfaz

Como hasta el momento hemos construido programas relativamente pequeños, hemos usado un solo archivo para cada uno. A partir de este momento vamos a empezar a separar los programas en dos módulos: uno para manejar la interacción con el usuario (pedirle datos, mostrarle información, etc.) y otro para manejar todo lo que consideramos la lógica del programa, es decir las instrucciones que son realmente el centro conceptual del programa.

Consideremos a modo de ejemplo, un programa que sirva para procesar información de un censo de población. El módulo con la interfaz de este programa servirá para que el usuario seleccione qué información quiere consultar y le mostrará las gráficas y tablas correspondientes. Por otro lado, la lógica del programa se encargará de calcular estadísticas, procesar los archivos y generar (¡no visualizar!) las gráficas que requiera el usuario.

Hay múltiples razones por los cuales esta separación es adecuada para programas como los que vamos a construir en este curso. La primera tiene que ver con el tipo de cosas que se hace en cada parte: mientras que en la interfaz todas las acciones deberían estar orientadas a interactuar con el usuario, en la lógica del programa hacemos cosas mucho más variadas. Con esto logramos que en cada módulo todo lo que hacemos esté relacionado: en lugar de tener funciones que le pidan información al usuario, hagan cálculos complejos y luego muestren el resultado, podemos tener en un módulo funciones dedicadas a la interacción y en otro módulo funciones dedicadas a hacer los cálculos.

Esta coherencia (o cohesión) termina llevando a programas que son mucho más fáciles de mantener porque dependiendo del tipo de error que se presente sabremos mejor dónde se debe corregir el código. La coherencia también se puede ver en el tipo de funciones que se utilizan: mientras en una interfaz basada en consola encontraremos muchos llamados a las funciones print e input, dentro de la lógica del programa encontraremos llamados muy diferentes que dependerán del problema que estemos resolviendo.

Otra ventaja de utilizar esta separación es que se vuelve más fácil probar la lógica de nuestros programas. Cuando la interfaz se mezcla con la lógica, para probar la corrección de un cálculo es necesario probar también la interfaz. Esto implica teclear datos cada vez y observar los resultados para compararlos con los esperados. Si la interfaz está separada de la lógica, podemos invocar directamente las funciones que hacen los cálculos, usando los mismos argumentos cada vez, es decir sin requerir la interacción con el usuario.

Otro motivo para utilizar esta separación tiene que ver con la reutilización. Veremos más adelante que las interfaces de muchos programas son muy similares y que hay mucho código que fácilmente se puede adaptar para utilizar en un nuevo programa. Si la interfaz estuviera mezclada con la lógica, esta reutilización sería mucho más difícil.

 

2.9.2. Implementación de módulos separados

Veamos ahora cómo se implementa en Python la separación entre la interfaz y la lógica de los programas. Para esto, tomaremos el programa ‘saludar.py’ que ya conocemos de una sección anterior:

 >>def saludar(nombre: str)-> str:
 >>return "Hola " + nombre + "!"

>>nombre = input("¿Cuál es su nombre? ")
>>saludo = saludar(nombre)
>>print(saludo)
 
Empezaremos primero con la creación del archivo con la lógica, al cual llamaremos ‘logica_saludar.py’.
 
>># Esto está en el archivo logica_saludar.py

>>def saludar(nombre: str)-> str:
>>   return "Hola " + nombre + "!" 

Como se puede ver, en este archivo únicamente dejamos la función que hace los “cálculos” del programa y crea un mensaje para saludar. Aunque el ejemplo es extremadamente sencillo, es importante notar que en este archivo no se está usando ni la función print ni la función input.

Otra cosa importante para analizar es lo que pasaría si decidiéramos ejecutar este módulo usando la siguiente instrucción en la línea de comandos: python logica_saludar.py.

2.9.3. Funciones de la interfaz

En una sección anterior hablamos de la conveniencia de tener funciones sin parámetros o funciones sin retorno. En esta sección podemos retomar la discusión puesto que es precisamente en el módulo que implementa la interfaz de un programa donde tiene más sentido incluir este tipo de funciones.

2.9.3.1. Funciones sin parámetros

Como dijimos antes, una función sin parámetros no tendría sentido dentro de la definición matemática de función. En el caso de Python, una función cuyo resultado no dependiera de ningún valor externo tampoco tendría mucho sentido; sería mucho más eficiente y claro implementarlo como una constante.

Sin embargo, dentro del módulo de la interfaz sí puede ser conveniente tener funciones sin parámetros. Tomemos como ejemplo el siguiente fragmento de código:

>>import libreria

>>def calcular_area_cuadrado() -> float:
>>    str_lado = input("Por favor indique el lado del cuadrado: ")
>>    lado = float(str_lado)
>>    area = libreria.calcular_area(lado)
>>    return area

 
En este programa tenemos una función sin parámetros que retorna un número decimal, pero ese número puede variar con cada ejecución. De hecho, el resultado de esta función depende completamente de algo externo: el valor que el usuario teclee cuando se ejecute la función.

Esta situación es muy frecuente dentro de los módulos que implementan la interfaz y que reciben información del usuario. Desconfíe de una función que no reciba parámetros y se encuentre mezclada con funciones que tengan que ver con la lógica de la aplicación: probablemente sea un error de diseño y sea necesario cambiar la signatura de la función.

2.9.3.2. Funciones sin retorno

En el módulo donde se implementa la interfaz también es posible tener funciones que no tengan un retorno. Estas funciones se suelen llamar procedimientos porque no cumplen con la característica básica de una función de producir un resultado.

El siguiente fragmento nos muestra una función de la interfaz que no tiene un retorno:

>>def mostrar_resultado(resultado: str) -> None:
>>    print("El resultado es:", resultado)

Observe que a diferencia de casi todas las funciones que hemos visto hasta ahora, esta no incluye una instrucción de tipo return. Esto quiere decir que, si alguien invoca a esa función, no va a recibir un resultado. Para expresar esto en la signatura, el tipo de retorno de la función se ha declarado como None. Más adelante veremos que None se utiliza para varias cosas en Python.

El cuerpo de la función sólo tiene un llamado a la función print. Esta función, que sirve para mostrar algún texto en la consola, es la que está produciendo un resultado, aunque no sea un resultado que se pueda utilizar dentro del programa en instrucciones siguientes 3
 

2.9.4. Ejercicios

  1. ¿Sólo con base en la signatura y lo que sabe hasta ahora, usted pondría las siguientes funciones en el módulo de la interfaz o en la librería de su programa?

  • def funcion(param1: int, param2: int) -> int

  • def funcion() -> int

  • def funcion(param1: int) -> None

  • def funcion(param1: int) -> int

 

2.9.5. Más allá de Python

La primera parte de esta sección introdujo algunos temas relativamente avanzados que tienen que ver con una gran área de trabajo dentro de la informática llamada Ingeniería de Software. La principal preocupación de esta área es cómo hacer para construir de forma eficiente software con calidad, lo cual implica considerar aspectos como la forma de estructurar el software, las metodologías de trabajo en los proyectos de desarrollo, las técnicas para diseñar interfaces que ofrezcan una buena experiencia a los usuarios, y hasta la psicología de los desarrolladores.

Es indudable que la selección de los lenguajes de programación que se usen tiene un impacto en muchos de los otros aspectos que son de interés para la Ingeniería de Software. Por ejemplo, el uso de un lenguaje como Python parece acelerar el desarrollo de programas pequeños, pero complica el mantenimiento de programas grandes debido a factores como el uso de un sistema de tipado dinámico.

Esto no quiere decir que no se pueda usar Python exitosamente para proyectos grandes. Lo que queremos decir es que la selección del lenguaje de programación debe tener en cuenta una gran cantidad de factores que van mucho más allá de cuál es el lenguaje de moda, cuál es el lenguaje que conocemos o cuál es el lenguaje que nos gustaría aprender. Todos los lenguajes tienen ventajas y desventajas que se deben sopesar cuidadosamente, y después de tomar una decisión cualquier proyecto debería introducir instrumentos para mitigar los riesgos o el impacto cuando se materialicen esos riesgos.

Por ejemplo, si se decide usar un lenguaje como Python o JavaScript para un gran proyecto, deberían definirse varias reglas desde el inicio para contrarrestar la dificultad para aplicar operaciones de refactoring 4.

En casi cualquier lenguaje de programación existen mecanismos similares a los módulos para descomponer programas y poder reutilizar bloques. Estos mecanismos también definen espacios de nombres (namespaces). Es decir que agrupan elementos para que los nombres no tengan que ser únicos dentro de todo el programa, y en lugar de eso sean únicos dentro de cada espacio de nombres. En Java y otros lenguajes orientados a objetos los mecanismos básicos de modularización son las clases, aunque también existen otros mecanismos como los paquetes y las librerías empaquetadas.


1

Las preocupaciones de las que hemos estado hablando se conocen usualmente como Requerimientos No Funcionales o como Atributos de Calidad. Aunque usualmente son un tema que se estudia más adelante, no está de más empezar a usar esta terminología y empezar a tener una sensibilidad hacia estas problemáticas. Pensar únicamente en la corrección del software y en construir programas lo más rápidamente posible nos ha llevado a una situación en la que tenemos cada vez más software que es inútil y tiene que botarse a la caneca y reconstruirse.

2

Si se compara el tiempo que toma el desarrollo inicial de un software y el tiempo que dura su mantenimiento posterior, en la mayoría de casos de software exitoso se va a encontrar que el mantenimiento se lleva la mayor parte del tiempo. Por ejemplo, el software que utilizan muchos bancos del mundo en su core, o el software que usan las aerolíneas para el control de vuelos y reservas, o el software que utilizan las empresas de telecomunicaciones para hacer conexiones entre redes, se construyó hace decenas de años, usando tecnologías que hoy ni siquiera se enseñan ya. La tecnología y las necesidades, especialmente de integración, han cambiado, lo cual ha obligado a hacerles actualizaciones permanentes a estos sistemas: si no fuera porque estos sistemas se construyeron para garantizar su mantenibilidad, hace muchos años que habrían tenido que ser remplazados y las empresas que los usan habrían tenido que incurrir en costos altísimos que podrían hasta haberlas quebrado.

3

Esto es lo que se conoce como un efecto de borde de un programa. Otros efectos de borde típicos son escribir en un archivo y enviar un mensaje por la red.

4

Refactoring es el término utilizado para procesos en los que el código fuente de un programa se restructura para mejorarlo pero sin cambiar su comportamiento. Por ejemplo, es común que se apliquen operaciones de refactoring para hacer que un programa sea mucho más fácil de mantener cambiando el nombre de las funciones para que sean naturales o para que se ajusten a estándares.

domingo, 5 de enero de 2025

PYTHON BASICO / EJERCICIOS

Ejercicio 2 (Fuente: Aprende con Alf)

Escribir un programa que almacene la cadena ¡Hola Mundo! en una variable y luego muestre por pantalla el contenido de la variable.

.......print('inicio de ejercicio 2')
.......# se define la variable cadena
.......# se le asigna el valor '!Hola Mundo!'
.......cadena = '!Hola Mundo!'
.......# se imprime el valor de la variable cadena
.......print(cadena)
.......print('Fin de ejercicio 2')

 

Ejercicio 3

Escribir un programa que pregunte el nombre del usuario en la consola y después de que el usuario lo introduzca muestre por pantalla la cadena ¡Hola <nombre>!, donde <nombre> es el nombre que el usuario haya introducido.

  • """En este ejercicio repasaremos el uso de print, input, y el uso de variables"""
  • print('Inicio de ejercicio 3')
  • nombre = input('Por favor ingrese su nombre: ')
  • print('¡Hola ', end= nombre + '!')
  • print('Fin de ejercicio 3') 

Otra solución:

........print('Inicio de ejercicio 3')
........nombre = input('Por favor ingrese su nombre: ')
........print('¡Hola ' + nombre + '!')
........print('Fin de ejercicio 3') 


 Ejercicio 4

Escribir un programa que muestre por pantalla el resultado de la siguiente operación aritmética (3+2/2*5)**2.

Solución al ejercicio 4:

........print('inicio del ejercicio 4')

........#Crear la variable "resultado_operacion"

........# Asignar el valor a la variable

........# Imprimir por pantalla el resultado de la operacion

.........""" Vamos a practicar el uso de operadores aritméticos, suma (+), división (/), multiplicación (*), potenciación (**)""" 

.........resultado_operacion = ((3+2) / (2*5))**2

.........print(resultado_operacion) 

# para una respuesta mas elegante: print("El resultado de la operacion es: ", resultado_operacion)

........print('Final del ejercicio 4')

 

Ejercicio 5

Escribir un programa que pregunte al usuario por el número de horas trabajadas y el coste por hora. Después debe mostrar por pantalla la paga que le corresponde.

Solución al ejercicio 5:

......print('Inicio de ejercicio 5)

......#Preguntar al usuario implica el uso de input

......#Numero de horas trabajadas, coste por hora y paga serian 3 variables diferentes 

......#Mostrar por pantalla implica el uso de print

......#Hallar el valor de paga implica expresión aritmética y el uso de operadores 

......#nht: numero de horas trabajadas

......#cph: coste por hora

......#pag: paga

......nht = float(input("Favor ingresar el numero de horas trabajadas por el trabajador: "))

......#Es posible que la cantidad de horas sea un valor con fraccion de hora por lo tanto es obligatorio usar float.

......cph = float(input("Favor ingresar el costo de cada hora $: "))

......paga = nht *cph

......print("El valor a pagar es: ","$", paga)

......print('Fin del ejercicio 5')

.

PYTHON / CONCEPTOS BASICOS /TODOS LOS OPERADORES

 Operadores

En Python existen una serie de operadores que también existen en los diferentes lenguajes de programación. Los operadores se agrupan según la función que realizan:

  • Operadores de asignación.
  • Operadores aritméticos.
  • Operadores relacionales.
  • Operadores lógicos.

  • Operador asignación

Aunque ya lo hemos usado en el objetivo número 1, el operador de asignación ‘=’ sirve para asignar un valor a una variable, lo que esté en la parte derecha del operador será asignado (almacenado) en la variable de la parte izquierda. Veamos unos ejemplos:


>>precio = 923
>>apellido = “Moreno”
>>numero = 34


En el primer ejemplo se está asignando el valor 923 a la variable precio, en el segundo ejemplo se está asignando la cadena de texto “Moreno” a la variable apellido, y en el último caso se está asignando el valor 34 a la variable numero.

Operadores aritméticos

Los operadores aritméticos son aquellos operadores que nos van a permitir realizar operaciones aritméticas con los datos. Una buena práctica a la hora de utilizar operadores aritméticos es la utilización de paréntesis para establecer el orden concreto de resolución de las operaciones, ya que cada lenguaje de programación establece la resolución de forma diferente y puedes encontrar resultados erróneos. Veamos unos ejemplos:

>>resultado_multiplicacion = 8 * 4 

>>coste = (6*11) - 4
>>numero_chucherias_por_persona = 50/4


En el primer ejemplo el resultado de la multiplicación se almacenará en la variable resultado_multiplicacion, en el segundo ejemplo el resultado de la operación será almacenado en la variable coste, y por último, el resultado de la división será almacenado en la variable numero_chucherias_por_persona

Operadores relacionales

Los operadores relacionales son aquellos que van a permitirte realizar comparaciones entre dos elementos. Son los siguientes:

Operador     Significado
<                    Menor que
>                    Mayor que
<=                  Menor o igual que
>=                  Mayor o igual que
==                  Igual que
!=                   Distinto que


El resultado de una operación relacional puede ser únicamente dos valores:

true: la comparación se cumple.
false: la comparación no se cumple.

Veamos algunos ejemplos:
.......7 < 5
.......9 == 3
.......2 < 12
.......88 >= 4


En el primer ejemplo la comprobación devolverá false, en el segundo devolverá false, en el tercero devolverá true y en el cuarto devolverá true.

Operadores lógicos

Los operadores lógicos permiten combinar las operaciones relacionales del punto anterior o valores booleanos independientes para obtener un único resultado. Los operadores lógicos que puedes utilizar son los siguientes:

  • AND: operador lógico que realiza la operación lógica ‘Y’ entre dos elementos. El resultado será true si ambos elementos son true, en caso contrario será false.
  • OR: operador lógico que realiza la operación lógica ‘O’ entre dos elementos. El resultado será true si uno de los dos elementos es true,en caso contrario será false.
  • NOT: operador lógico que realiza la operación lógica ‘NO’. El resultado será true si el elemento es false, y será false si es true.

Los operadores lógicos pueden utilizarse en expresiones combinadas, para ello, tal y como te hemos explicado en los operadores aritméticos te aconsejamos que utilices paréntesis para separar las diferentes expresiones. Veamos algunos ejemplos:


........(5<3) AND (4==7)
........(1<7) OR (3==3)
........NOT(6==7)
........True AND False


En el primer ejemplo la comprobación devolverá el valor false, ya que 5 no es menor que 3 y 4 no es igual que 7; en el segundo devolverá el valor true, ya que 1 si es menor que 7 o 3 si es igual que 3; en el tercero devolverá el valor true, ya que esta negando la expresión falsa de que 6 es igual que 7 y en el cuarto false.

sábado, 4 de enero de 2025

TEORIA DE VARIABLES Y TIPOS DE DATOS EN PYTHON

 Conceptos teóricos

 Variables

Las variables son datos que necesitas almacenar y utilizar en los programas y que residen en la memoria del ordenador. Tienen las siguientes características:

  • Nombre: identificador dentro del código fuente que utilizamos para usarlas.
  • Tipo: tipo de dato que almacena la variable.
  • Valor: valor que almacenan. Al declarar una variable tienes que indicarle un valor inicial, que puede verse modificado a medida que se va ejecutando el programa y según vayas necesitando, de ahí que se llamen variables.


Un ejemplo de uso de variables puede ser la necesidad de almacenar en tu programa la edad del usuario. Para ello, crearías una variable con un nombre concreto y el tipo de datos que almacenarías en ella sería un entero.


En Python las variables se definen utilizando las letras de la A a la Z, tanto en mayúsculas como en minúsculas, los números del 0 al 9 (excepto en el primer carácter del nombre) y utilizando el carácter “_”. El lenguaje Python tiene palabras reservadas que no pueden ser utilizadas como nombres de variables, en los anexos del libro puedes encontrar la lista de palabras reservadas de Python y para qué se utilizan cada una de ellas. A continuación, te mostramos algunos ejemplos de variables:


>> edad = 4
>> nombre = “Alfredo”


La primera variable, edad, almacenará el valor numérico 4, mientras que la segunda variable, nombre, almacenará la cadena de texto “Alfredo”. Tal y como puedes observar, en Python no se establece el tipo de dato a la hora de declarar una variable, realmente no existe una declaración propiamente dicha
como existe en otros lenguajes, simplemente escribes el nombre que quieres que tenga y le asignas el valor correspondiente.

Se puede asimilar la variable como una caja de cartón, en la cual guardas un objeto, el nombre seria el rotulo que la caja tiene y que permite identificar el objeto u objetos que la caja almacena. Y los objetos serian los valores que la caja almacena.

 

En este apartado vamos a explicarte los diferentes tipos de datos que existen en Python y las diferentes operaciones que puedes realizar con los datos.

Tipos de datos

En informática, la información no es otra cosa que una secuencia de ceros y unos que se estructuran en bloques para facilitar el manejo de ésta. Por lo tanto, toda la información que existe se encuentra tipificada por el tipo de información que es (tipo de dato). No es lo mismo una cadena de texto que un
número entero, o decimal.


Las variables en Python pueden ser de los siguientes tipos:

  • Entero: Número sin decimales, tanto positivo como negativo, incluyendo el 0. <int>

  • Real: Número con decimales, tanto positivo como negativo, incluyendo el 0. <float>

  • Complejo: Número con parte imaginaria.
  • Cadenas de texto: texto, ' , ", <str>
  • Booleanos: Pueden tener dos valores: <True> o <False>
  • Conjuntos: Colección de elementos no ordenados y no repetidos.
  • Lista: Vector de elementos que pueden ser de diferentes tipos de datos.

  • Tuplas: Lista inmutable de elementos.
  • Diccionario: Lista de elementos que contienen claves y valores.

Las variables no tienen un tipo concreto en Python, puedes utilizar una variable para almacenar un número en una parte de tu programa y posteriormente puedes utilizarla para almacenar una lista de elementos.

REGLAS PARA UNA ESCRITURA SIMPLE EN PYTHON

 El ZEN de Python

La filosofía del lenguaje Python está plasmada en el documento escrito por Tim Peters que puedes encontrar en https://www.python.org/dev/peps/pep-0020/

A continuación, encontrarás los mantras de Python traducidos al castellano:

  • Hermoso es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Sencillo es mejor que anidado.
  • Escaso es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no son lo suficientemente especiales para romper las reglas.
  • Lo práctico le gana a la pureza.
  • Los errores no deben pasar en silencio.
  • A menos que sean silenciados.
  • Respecto a la ambigüedad, rechazar la tentación de adivinar.
  • Debe haber una – y preferiblemente sólo una – manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia en un primer momento a menos que seas holandés.
  • Ahora es mejor que nunca. Aunque “nunca” es a menudo mejor que “ahora mismo”.
  • Si la aplicación es difícil de explicar, es una mala idea.
  • Si la aplicación es fácil de explicar, puede ser una buena idea.
  • Los espacios de nombres son una gran idea ¡hay que hacer más de eso!

CONCEPTOS BASICOS DE PROGRAMACION (0.1) QUE ES PYTHON

 ¿Qué es Python?

Python es un lenguaje de programación que fue creado a finales de los años 80 por el holandés Guido van Rossum, fan del grupo humorístico Monty Python, de ahí el nombre que le puso al lenguaje de programación.


Las características del lenguaje son las siguientes:

  • Simplicidad: ¡La gran fortaleza de Python!
  • Sintaxis clara: La sintaxis de Python es muy clara, es obligatoria la utilización de la indentación en todo el código que se escribe. Gracias a esta característica todos los programas escritos en Python tienen la misma apariencia.
  • Propósito general: Se pueden crear todo tipo de programas, incluyendo páginas web.
  • Lenguaje interpretado: Al ser un lenguaje interpretado no es necesario compilarlo, lo que te ahorrará tiempo a la hora de desarrollar. También implica que su ejecución sea más lenta, ya que los programas son ejecutados por el intérprete de Python en vez de ejecutados por la máquina donde lo arrancas.
  • Lenguaje de alto nivel: No es necesario que te preocupes de aspectos de bajo nivel como puede ser el manejo de la memoria del programa.
  • Lenguaje orientado a objetos: Lenguaje construido sobre objetos que incorporan datos y funcionalidades.
  • Open Source: Python ha sido portado a los diferentes sistemas operativos, por lo que puedes usarlo en el que más te guste. Otra característica de ser Open Source es que es un lenguaje de programación gratuito.
  • Extensas librerías: Facilitan la programación al incorporar mediante librerías una gran cantidad de funcionalidades. ejemplos de librerías mas conocidas: Numpy, Pandas, Matplotlib, math, etc.
  • Incrustable: Es posible añadir programas escritos en Python a
    programas escritos en C y C++.


    ¡Python es un lenguaje de programación muy completo! De todas las características que tiene, la clave de su gran éxito es la primera de ellas, la simplicidad con la que cuenta, que lo hace perfecto para empezar en el mundo de la programación.

lunes, 9 de octubre de 2023

Python basico. Ej 2.8-2. Libro Logica de programacion. Efrain Oviedo

 2. Describa los pasos necesarios para llevar una amiga a cine.

INICIO

   1. Comunicar la invitación a la amiga.

        SI (INVITACION = = ACEPTADA):

            Seleccionar de manera conjunta una película para ver y la sala de cine en la que la proyectan

         SINO:

              Dejar la invitación para otra ocasión (saltar al FIN)

    2. Definir el medio de transporte a utilizar para llevar la amiga a cine

    2.1 Transporte publico (Bus, taxi, Uber, Metro, rutas de buses integradas al metro, etc)

    2.2  Transporte privado (automóvil, motocicleta)

    3. Recoger a la amiga en su casa con la suficiente anticipación para llegar al cine a tiempo.

    4. Llevar a la amiga desde su casa hasta el cine en la opción de transporte seleccionada

    5. Comprar las boletas para ver la película.

    5.1 comprar las boletas en la tienda online en el sitio web de la compañía que administra el cine

    5.2 Comprar las boletas en la taquilla de la sala de cine (esto implica hacer fila).

    6. Comprar snacks en la tienda de la sala para consumir durante la película (esto implica hacer fila).

   7. Ingresar a la sala respectiva 10 minutos antes de la hora de inicio de la película. 

FIN

  

Python basico. Ej 2.8-1. Logica de programacion Efrain Oviedo

 1. Haga un procedimiento que describa los pasos para cruzar una calle por un puente peatonal.

 

INICIO

  1. Llegar hasta la base de las escalas del puente.

  2. Subir las escalas del puente peatonal. 

  3. Cruzar la pasarela del puente apoyando una mano sobre el pasa manos.

 4. Bajar las escaleras del otro lado del puente.

 5. Continuar su camino en la dirección requerida.

FIN

domingo, 17 de julio de 2022

PYTHON BASICO: CALCULO DEL AREA Y LONGITUD DE UNA CIRCUNFERENCIA

 

# 17. Dado el radio de un círculo. Haga un algoritmo que obtenga el área del círculo y la longitud
# de la circunferencia.

# Solución:
# INICIO
#   LEA:r
# ESCRIBA: A = pi * (r**2)
# ESCRIBA: L = 2*pi*r

# En python sería:

print('Inicio de código')
import time
print(time.asctime())
import math
r = float(input('Favor ingrese el radio del circulo: '))
A = (math.pi) * r ** 2
L = (math.pi) * 2 * r
print('El area del circulo es: ',A)
print('La longitud de la circunferencia es: ',L)
print('Fin de código')

>>>
 Windows PowerShell

Prueba la nueva tecnología PowerShell multiplataforma https://aka.ms/pscore6

PS C:\Users\hp user\.vscode> & "C:/Users/hp user/AppData/Local/Programs/Python/Python310/python.exe" "c:/Users/hp user/.vscode/PYTHON FOLDER/Logica_programacion/Eje3-5-17.py"
 
Inicio de código
Sun Jul 17 18:09:55 2022
Favor ingrese el radio del circulo: 5
El area del circulo es: 78.53981633974483
La longitud de la circunferencia es: 31.41592653589793
Fin de código

PS C:\Users\hp user\.vscode>

PYTHON BASICO: TRANSPOSICION DE VALORES DE VARIABLES

 Problemas 3.5 #16

# 16. Elabore un algoritmo que lea las variables A y B y pase el valor de A a B y de B a A.
# Sin # usar más variables

# Solución:
# Algoritmo:
# INICIO
#   LEA: A,B
#   ESCRIBA: B,A = A,B
# FIN

# En python:

print('Inicio de código')
import time
print(time.asctime())
A = int(input('Favor ingrese un valor para la variable A: '))
B = int(input('Favor ingrese un valor para la variable B: '))
B,A = A,B
print ('El nuevo valor de A es: ', A)
print('El nuevo valor de B es: ', B)
print('Fin de código')
 
>>>
Inicio de código
Sun Jul 17 16:22:36 2022
Favor ingrese un valor para la variable A: 5
Favor ingrese un valor para la variable B: 10
El nuevo valor de A es: 10
El nuevo valor de B es: 5
Fin de código

PS C:\Users\hp user\.vscode>

PYTHON BASICO: ESTRUCTURA SECUENCIAL. POSITIVO Y NEGATIVO DE UN MISMO NUMERO

 Eje 3.5. #15. Libro Lógica de programación del Ing Efrain Oviedo. UdeA

# 15. Elabore un algoritmo que lea un número negativo e imprima el número
# y el positivo del # mismo.

# Algoritmo:
# INICIO
# LEA: -N
# ESCRIBA: -N
# ESCRIBA: N

# En python:

print('Inicio de código')
import time
print(time.asctime())
neg = int(input('Favor ingrese un número negativo: '))
print('El número negativo ingresado es: ', neg)
pos = - neg
print('El número positivo es: ', pos)
print('Fin de código')
 
>>>
 
Sun Jul 17 15:51:07 2022
Favor ingrese un número negativo: -15
El número negativo ingresado es: -15
El número positivo es: 15
Fin de código

PS C:\Users\hp user\.vscode>

PYTHON BASICO: ESTRUCTURA SECUENCIAL

 Ej 2.8 # 10. Libro lógica de programación Ing Efrain Oviedo UdeA

# 10. Haga un seguimiento del siguiente algoritmo y diga qué valores se muestran en las variables
# P, R y S. (use los valores definidos en 9)
# INICIO
# P = A ** (1/2) ** B
# R = A * B + A ** (1/2)
# S = B * A - B ** 2 / 4 * C
# ESCRIBA: P, R, S
# TERMINE

# SOLUCIÓN:
# El enunciado del ejercicio dice que se deben usar los valores del ejercicio 9
# A = 4
# B = 5
# C = 1

print('Inicio de código')
import time
print(time.asctime())
A = 4
B = 5
C = 1
P = A ** (1/2) ** B
R = A * B + A ** (1/2)
S = B * A - B ** 2/4 * C
print('Los valores que arroja el algoritmo para P,R,S son respectivamente: ')
print(P,R,S)
print('Fin de código')
>>>
Inicio de código
Sun Jul 17 13:26:25 2022
Los valores que arroja el algoritmo para P,R,S son respectivamente:
1.0442737824274138 22.0 13.75
Fin de código
PS C:\Users\hp user\.vscode>


PYTHON BASICO: CONVERTIR UN ALGORITMO A LENGUAJE PYTHON

Ejercicios 2.8 Libro Logica de programación del autor Ing. Efrain Oviedo, profesor UdeA 

Ej 9:

 
# 9. Si el valor interno de la variable A = 4, el de B = 5, de C = 1, L =.V. (Verdadero). Muestre
# cuáles son los valores impresos en el siguiente algoritmo.

# INICIO
# X = B * A _ B **2/4 * C
# Y = A * B/3 ** 2
# Z = (((B + C) /2 * A + 10) * 3 * B) _ 6
# ESCRIBA: X, Y, Z
# TERMINE

# SOLUCION:
# Lo primero que se debe hacer es analizar las condiciones del problema
# Datos de entrada: A, B, C, L
# Datos de salida: X, Y, Z

print('Inicio de código')
import time
print(time.asctime())
A = 4
B = 5
C = 1
L = True
X = (B * A)- ((B)**(2/4)) * C
Y = A * (B/3) ** 2
Z = (((B + C) /2 * A + 10) * 3 * B) - 6
print('Los resultados para X,Y,Z respectivamente son: ')
print(X,Y,Z)
print('Fin de código')
 
>>> 
 
Inicio de código
Sun Jul 17 09:42:26 2022
Los resultados para X,Y,Z respectivamente son:
17.76393202250021 11.111111111111112 324.0
Fin de código

PS C:\Users\hp user\.vscode>  

lunes, 4 de julio de 2022

PYTHON BASICO: PROBLEMA 6.4-104 LIBRO LOGICA DE PROGRAMACIÓN

Problemas 6.4 Ejercicio 104. Libro lógica de programacion. Efrain Oviedo. udeA

En la elección del candidato estudiantil se presentaron 5 candidatos numerados
consecutivamente del 1 al 5. Cada elector depositó su voto con el número de su candidato
favorito. Al final del escrutinio se desea saber cuántos votos obtuvo cada candidato y el
porcentaje de votos por cada participante.

Para la solución se definen variables de entrada, de salida, se hace uso de un (for) y (if /else)


 >>> Solución en Jupyter Note book en visual studio code

print('Inicio de código')
import time
print(time.asctime())
cont_cand1 = 0
cont_cand2 = 0
cont_cand3 = 0
cont_cand4 = 0
cont_cand5 = 0
i = 0
for i in range(11):
    voto = int(input('Para votar favor ingresar el número de su candidato favorito (1 a 5): '))
    if voto == 1:
        cont_cand1 +=1
    else:
        cont_cand1 += 0
    if voto == 2:
        cont_cand2 +=1
    else:
        cont_cand2 +=0
    if voto == 3:
        cont_cand3 +=1
    else:
        cont_cand3 +=0
    if voto == 4:
        cont_cand4 +=1
    else:
        cont_cand4 +=0
    if voto == 5:
        cont_cand5 +=1
    else:
        cont_cand5 +=0
    i += 1
total_votos = cont_cand1 + cont_cand2 + cont_cand3 + cont_cand4 + cont_cand5
porcentaje_cand1 = (cont_cand1 * 100)/(total_votos)
porcentaje_cand2 = (cont_cand2 * 100)/(total_votos)
porcentaje_cand3 = (cont_cand3 * 100)/(total_votos)
porcentaje_cand4 = (cont_cand4 * 100)/(total_votos)
porcentaje_cand5 = (cont_cand5 * 100)/(total_votos)
print('los votos obtenidos por el candidato #1 fueron: ', cont_cand1)
print('El porcentaje obtenido por el candidato #1 fue: %',porcentaje_cand1)
print('los votos obtenidos por el candidato #2 fueron: ', cont_cand2)
print('El porcentaje obtenido por el candidato #2 fue: %',porcentaje_cand2)
print('los votos obtenidos por el candidato #3 fueron: ', cont_cand3)
print('El porcentaje obtenido por el candidato #3 fue: %',porcentaje_cand3)
print('los votos obtenidos por el candidato #4 fueron: ', cont_cand4)
print('El porcentaje obtenido por el candidato #4 fue: %',porcentaje_cand4)
print('los votos obtenidos por el candidato #5 fueron: ', cont_cand5)
print('El porcentaje obtenido por el candidato #5 fue: %',porcentaje_cand5)
print('Fin de código')

>>> Respuesta de la terminal:


Inicio de código Mon Jul 4 16:28:50 2022 los votos obtenidos por el candidato #1 fueron: 3 El porcentaje obtenido por el candidato #1 fue: % 27.272727272727273 los votos obtenidos por el candidato #2 fueron: 2 El porcentaje obtenido por el candidato #2 fue: % 18.181818181818183 los votos obtenidos por el candidato #3 fueron: 2 El porcentaje obtenido por el candidato #3 fue: % 18.181818181818183 los votos obtenidos por el candidato #4 fueron: 2 El porcentaje obtenido por el candidato #4 fue: % 18.181818181818183 los votos obtenidos por el candidato #5 fueron: 2 El porcentaje obtenido por el candidato #5 fue: % 18.181818181818183 Fin de código

Inicio de código Mon Jul 4 16:28:50 2022 los votos obtenidos por el candidato #1 fueron: 3 El porcentaje obtenido por el candidato #1 fue: % 27.272727272727273 los votos obtenidos por el candidato #2 fueron: 2 El porcentaje obtenido por el candidato #2 fue: % 18.181818181818183 los votos obtenidos por el candidato #3 fueron: 2 El porcentaje obtenido por el candidato #3 fue: % 18.181818181818183 los votos obtenidos por el candidato #4 fueron: 2 El porcentaje obtenido por el candidato #4 fue: % 18.181818181818183 los votos obtenidos por el candidato #5 fueron: 2 El porcentaje obtenido por el candidato #5 fue: % 18.181818181818183 Fin de código

Entradas recientes

Estructura secuencial. solución matemática vs programación

 **Ejemplo resuelto # 4:** Fuente: Capitulo 3 del libro "Lógica de programación de Efraín Oviedo" A la mamá de Juan le preguntan s...

Entradas Populares