taller_1_Python3

TALLER DE PROGRAMACION 1: (20% de la nota final)

Fuente: []

**Fecha y hora límite de entrega:** Enviar a daalvarez@unal.edu.co. Sin excepción, por cada día de retraso en la entrega, se rebajarán 3 décimas de la nota de la entrega del Taller 1.
 * Parte 1: Septiembre 24, 2017 a las 11:59pm
 * Parte 2: Octubre 16, 2017 a las 11:59pm
 * Parte 3: Octubre 31, 2017 a las 11:59pm
 * Parte 4 (opcional): Noviembre 14, 2017 a las 11:59pm. La parte 4 de este taller es opcional y reemplaza la nota más baja de las entregas, 1, 2 y 3.

=Los ejercicios a realizar= Del libro Marzal-Gracia-García: Capítulo 4: Estructuras de Control 67: realizar este ejercicio sin utilizar ciclos 72 78 Prohibido usar la función max de Python, o alguna similar. 82 105 117: realizar este ejercicio utilizando ciclos 124 130
 * Parte 1: 18 ejercicios**

Del libro Trejos: Capítulo 7: Decisiones 14: Leer dos números enteros de dos dígitos y determinar a cuánto es igual la suma de todos los dígitos. 19: Leer tres números enteros y determinar cuál es el mayor. Usar solamente dos variables. OJO: solo dos variables en todo el programa. 24: Leer un número entero y determinar cuántos dígitos pares tiene. 29: Leer un número entero de cinco dígitos y determinar si es un número capicúo. Ej. 15651, 59895 39: Leer tres números enteros (de un número de dígitos indeterminado) y determinar si el penúltimo dígito de los tres números es igual. Tengamos en cuenta que para el número 23 el primer dígito es el 2. Y para el número 543 es el 5. 44: Leer un número entero y determinar si el primer dígito es múltiplo de alguno de los otros dígitos. Tengamos en cuenta que para el número 23 el primer dígito es el 2. Y para el número 543 es el 5.

Capítulo 8: Ciclos 9: Mostrar en pantalla todos los números terminados en 6 comprendidos entre 25 y 205 24: Leer un número entero y determinar a cuánto es igual al suma de sus dígitos pares. Tengamos en cuenta que para el número 23 el primer dígito es el 2. Y para el número 543 es el 5. 29: Leer un número entero y determinar a cuánto es igual el primero de sus dígitos. Tengamos en cuenta que para el número 23 el primer dígito es el 2. Y para el número 543 es el 5. 49: Utilizando ciclos anidados generar las siguientes ternas de números 1 1 1 2 1 2 3 1 3 4 2 1 5 2 2 6 2 3 7 3 1 8 3 2 9 3 3

En los siguientes ejercicios considerar lo siguiente:
 * Parte 2: 21 ejercicios**
 * Del libro Trejos:**
 * En L=[1,5,5,5,3,4], se debe decir que el 5 aparece 3 veces o que el 5 está repetido 2 veces.

Capitulo 9 - Vectores 9. Leer 10 números enteros, almacenarlos en un vector y determinar cuántas veces está repetido el mayor. 14. Leer 10 números enteros, almacenarlos en un vector y determinar cuántas veces aparece el promedio entero de los datos dentro del vector.

24. Leer 10 números enteros, almacenarlos en un vector y determinar en qué posición está el número con mas dígitos. En caso que existan varios máximos, reportarlos todos. Por ejemplo: Entre el número entero 1 = 32 Entre el número entero 2 = 3435 Entre el número entero 3 = 132 Entre el número entero 4 = 4233342

El entero con más dígitos que usted entró es el 4233342 y se encuentra en la posición 4.

34. Leer 10 números enteros, almacenarlos en un vector y determinar cuántas veces en el vector se encuentra el dígito 2. No se olvide que el dígito 2 puede estar varias veces en un mismo número. Por ejemplo, en la lista [127, 745, 0, -67, -547, 5421, -77, -983, 54,12] hay 6 dígitos 7. 39. Leer 10 números enteros, almacenarlos en un vector y determinar si la semisuma entre el valor mayor y el valor menor es un número par. 44. Leer 10 números enteros, almacenarlos en un vector y determinar cuántos de los números almacenados en dicho vector pertenecen a los 100 primeros elementos de la serie de Fibonacci. 48. Leer 10 números enteros, almacenarlos en un vector y determinar en qué posición se encuentra el número primo con mayor cantidad de dígitos pares.

Capítulo 10 - Matrices 9. Leer una matriz 3x4 entera y determinar cuántos de los números almacenados son primos y terminan en 3. 24. Leer dos matrices 4x5 enteras y determinar si el mayor número primo de una de las matrices también se encuentra en la otra matriz. 29. Leer una matriz 4x6 entera y determinar si alguno de sus números está repetido al menos 3 veces. 44. Leer dos matrices 5x5 enteras y determinar si el promedio entero de los números terminados en 4 de una matriz se encuentra al menos 3 veces en la otra matriz. 49. Leer una matriz 3x3 entera y determinar si el promedio de todos los datos almacenados en ella se encuentra también almacenado.

Capítulo 11 - Funciones 4. Construir una función que reciba como parámetro un entero y retorne la cantidad de dígitos pares. 34. Haga un programa que solicite una cadena al usuario y determine en ella la palabra más larga y la palabra más corta que se ha ingresado, sin utilizar ninguno de los métodos de cadenas o similares que vienen con el Python. Unicamente se puede utilizar los operadores de comparación y de indexación y la función len para realizar este programa. Por ejemplo en: "        María       tenía un             corderito   llamado        Pepe   " la palabra más corta es "un" y la palabra más larga es "corderito". 43. Construir una función que reciba como parámetro una matriz de tamaño mxn entera y retorne la cantidad de números primos almacenados en la matriz. 49. Construir una función que reciba una matriz 5x5 y retorne el valor de su moda. La moda de un conjunto de datos es el dato que mas se repite.

158 Diseña un programa que lea una cadena y un número entero N y nos diga cuántas palabras tienen una longitud de N caracteres. Tenga en cuenta que por ejemplo en "María, quien tiene 12 hermanos, trabaja en Manizales.", el 12 no se considera una palabra y que los signos de puntuación no cuentan para determinar la longitud de la palabra; por lo que María tiene 5 letras (no seis si se incluye la coma). 165 Diseña un programa que muestre la cantidad de números que aparecen en una cadena leída de teclado. ¡Ojo! Con número no queremos decir dígito, sino número propiamente dicho, es decir, secuencia de dígitos. La cadena "un 1, un 201 y 2 unos", por ejemplo, tiene 3 números: el 1, el 201 y el 2. Considere únicamente números enteros. 167. Diseña un programa que indique si una cadena introducida por el usuario está bien formada como identificador de variable. Si lo está, mostrará el texto «Identificador válido» y si no, «Identificador inválido». Prohibido usar el método str.isidentifier. 200. Diseña un programa que lea dos cadenas y devuelva el prefijo común más largo de ambas. (Ejemplo: las cadenas "policía" y "polinización" tienen como prefijo común más largo a la cadena "poli"). 300 Diseña una función que reciba una lista de palabras (cadenas) y devuelva, simultáneamente, la primera y la última palabra según el orden alfabético. NOTA: prohibido usar la función sort, sorted u otra similar de PYTHON.
 * Del libro Marzal-Gracia-García:**

Nota: para la impresión de tablas, utilizar el comando print y sus modificadores % o .format -- ver diapositivas "09 - Entrada y salida en Python 3". No usar PANDAS y otra librería para la impresión de tablas.
 * Parte 3: 15 ejercicios**

prob_01.py: Determinar si el password solicitado por su programa es seguro. Lo es si cumple los siguientes requisitos: Debe tener: a) entre 6 y 12 caracteres (incluido) b) al menos una letra minúscula [a, b, ..., z] c) al menos una letra mayúscula [A, B, ..., Z] d) al menos un número [0, 1, ..., 9] e) al menos un caracter de [#$%&/?@*] NOTA: observe que dice "AL MENOS" por lo que si se tienen otros caracteres como el espacio o letras como la Ñ, sería válido.

prob_02.py: Escriba un programa que pregunte el nombre, la edad y el puntaje de 10 personas. Imprima la tabla con la información de las personas de modo que estén ordenadas de forma ascendente así: a) primero ordene por nombre b) si los nombres son iguales, ordene por edad c) si adicionalmente las edades son iguales, ordene por el puntaje. Por ejemplo la tabla siguiente, cumple las condiciones de ordenamiento anteriormente descritas: code NOMBRE EDAD  PUNTAJE Jairo    19     98 Jairo    21     18 Jairo    21     99 Juan     18     80 Pedro    17     86 code Nota: El puntaje será un número entero entre 0 y 100. La edad es un número entero no negativo. Nota: para no complicar la cosa, con un solo nombre basta... no hay que utilizar nombres compuestos/apellidos Nota: para la impresión de tablas, utilizar el comando print y sus modificadores % o .format -- ver diapositivas "09 - Entrada y salida en Python 3". No usar PANDAS y otra librería para la impresión de tablas. Nota: la tabla la podría ingresar así: Entre el número de personas = 10

Entre el nombre de la persona 1: JAIRO Entre la edad de la persona 1: 19 Entre el puntaje de la persona 1: 98

Entre el nombre de la persona 2: jairo Entre la edad de la persona 2: 21

etc ...

Observe que el programa organizó el nombre y puso la primera en mayúscula y el resto de letras en minúsculas. Esto se puede organizar con str.title

prob_03.py: Un robot se mueve en el plano cartesiano empezando del punto (0,0). El robot se puede mover hacia ARRIBA, DERECHA, ABAJO, IZQUIERDA. Suponga que el usuario entró el registro de movimientos del robot así: code DIRECCION, DISTANCIA [m]: ARR 5.1 ABA 3.2 DER 7 IZQ 2.2 DERE 2.3 >>> Error comando "DERE" no reconocido

IZQ 3.2 ABA 8.1 ABA 823ad >>> Error se esperaba un número; se recibió la expresión no reconocida "823ad".

IZQ 2 code Determine la distancia al punto (0,0) y la posición (X,Y) actual del robot.
 * FIN*

prob_04.py: Escriba un programa que contabilice la frecuencia de las palabras en un texto. Por ejemplo si la cadena entrada es: "Indeciso entre Python 2 y Python 3? Te recomiendo que uses Python 3 (ya que Python 2 dejará de ser soportado en el año 2020)" entre code PALABRA   VECES 2         2 2020       1 3          2 Indeciso   1 Python    4 Te        1 año       1 de        1 dejará    1 el        1 en        1 entre     1 que       2 recomiendo 1 ser       1 soportado 1 uses      1 y         1 ya        1 code Nota: para la impresión de tablas, utilizar el comando print y sus modificadores % o .format -- ver diapositivas "09 - Entrada y salida en Python 3". No usar PANDAS y otra librería para la impresión de tablas. Nota: en este programa las palabras 'Hola' y 'hola' no se consideran iguales.

prob_05.py: Escriba un programa que pregunte una frase y calcule el número de dígitos, de letras, de espacios y de signos varios. Por ejemplo "Hola a tod@s! Hoy es 18 de Octubre de 2017" LETRAS = 25 DIGITOS = 6 SIGNOS = 2 ESPACIOS = 9 MAYUSCULAS = 3 MINUSCULAS = 22

prob_06.py: Sin utilizar funciones o métodos de cadenas, escriba un programa que pregunte dos dígitos "a" y "n" y calcule la suma: a + aa + aaa + ... + aaaaaaaaaaaa (en esta última 'a' se repite 'n' veces) Por ejemplo si a=9 y n=5 el programa debe imprimir: 9 + 99 + 999 + 9999 + 99999 = 111105 Observe que a pude tomar los valores 0, 1, 2, ..., 9 y n debe ser un número entero no negativo. Nota: se pueden utilizar cadenas para imprimir, pero no para calcular el resultado

prob_07.py: Dadas dos listas escriba un programa que encuentre aquellos elementos de su intersección (sin utilizar los comandos de conjuntos (set) de python). Por ejemplo si A = [1,'Hola',3,6,'xxx',78,35,55] y B = [12,'xyz',24,35,24,88,120,155,'Hola'] Su intersección es: ['Hola', 35]

​A =['hola','hola','hola'] y B =['hola','hola','hola'] Su intersección es: ['hola']

​A = ['hola','hola', 25] y B = ['hola',30] Su intersección es: ['hola']

prob_08.py: Haga un programa que solicite las coordenadas (x1,y1), (x2,y2) y (x3,y3) de un triángulo y determine si el punto (0,0) pertenece a dicho triángulo o no.

prob_09: (investigar) Escriba un programa que lea una tabla como: code NOMBRE EDAD  PUNTAJE Jairo   19     98 Jairo   21     18 Jairo   21     99 Juan    18     80 Pedro   17     86 code y la escriba en un archivo de texto con formato .CSV (ver: https://es.wikipedia.org/wiki/Valores_separados_por_comas). No usar librerías especiales como PANDAS o NUMPY. Abra el archivo desde MS EXCEL. Nota: para la impresión de tablas, utilizar el comando print y sus modificadores % o .format -- ver diapositivas "09 - Entrada y salida en Python 3". No usar PANDAS y otra librería para la impresión de tablas. Nota: la tabla la podría ingresar así: Entre el número de personas = 10

Entre el nombre de la persona 1: JAIRO Entre la edad de la persona 1: 19 Entre el puntaje de la persona 1: 98

Entre el nombre de la persona 2: jairo Entre la edad de la persona 2: 21

etc ...

Observe que el programa organizó el nombre y puso la primera en mayúscula y el resto de letras en minúsculas. Esto se puede organizar con str.title

prob_10.py: (investigar) Haga un programa que lea del disco un archivo de texto y cuente el número de caracteres, palabras y líneas que existen dentro de este. NOTA: para mayor facilidad, usted podría considerar los números como caracteres/palabras, es decir: 'Hoy es 27 de Octubre de 2017' tiene 7 palabras y 28 letras La interfase de este programa podría ser (usted puede crear una diferente): Entre el nombre del archivo: texto.txt El archivo texto.txt tiene: LINEAS = 1 PALABRAS = 7 CARACTERES = 28 (observe que aquí se están incluyendo también los espacios

prob_11.py: Escriba un programa que pregunte un número entero no negativo n e imprima el resultado de (x+y)^n. Por ejemplo si n =3, el programa imprime: code 3   3     2       2   3  (x+y)  = x  + 3x y + 3xy + y code Ver. https://es.wikipedia.org/wiki/Teorema_del_binomio NOTA: no usar la librería sympy.

prob_12.py: Teniendo en cuenta que el 1 de enero de 2017 fue un domingo, escriba un programa que pregunte una fecha del año 2017 y escriba el día correspondiente. Por ejemplo MES = 10 DIA = 18 El programa determinará que el 18 de octubre de 2017 es un miércoles.

prob_13.py: Escriba un programa que lea una secuencia de números enteros entre 1 y 5 y grafique su histograma en modo texto, algo así como: code Histograma: 14            5|===================== 33             4|================================================== 20             3|============================== 12             2|================== 5             1|=======                +--+--+--+--+                0             10             20             30             40 code Notas:
 * la barra más larga del histograma debe tener 50 =s
 * el usuario determinará que tan larga es la secuencia de números entrados.

prob_14.py: Escriba un programa que dada una lista imprima el producto de la multiplicación de los números en la lista, excepto el número en la posición i. Por ejemplo dado [1, 2, 3, 4], el programa debe imprimir [24, 12, 8, 6]. En caso que se ingrese un único número, el programa debe avisar que el cálculo no es posible.

prob_15.py: Escriba un programa que acepte 18 números enteros diferentes entre 1 y 20. El programa debe detectar cuales fueron los dos números entre 1 y 20 que no se ingresaron. Nota: no se pueden usar funciones de conjuntos de python.


 * Parte 4 -- opcional para los que quieran mejorar su nota y obligatorio para los que quieran volver a repetir la sustentación (12 ejercicios)**

prob_01.py Hacer un programa que pregunte dos horas (en el formato militar HH:MM). Si ambas son iguales, reportarlo, de lo contrario, mostrar su diferencia en minutos. No usar librerías especializadas en el manejo de fechas/horas (datetime, etc). Tenga en cuenta que las horas están entre las 00:00 y las 23:59. code >> Entre la hora 1: 13:44 >> Entre la hora 2: 9:50 La diferencia en tiempo entre ambas horas es 234 minutos. code

No importa el orden de entrada: code >> Entre la hora 1: 9:50 >> Entre la hora 2: 13:44 La diferencia en tiempo entre ambas horas es 234 minutos. code

prob_02.py Hacer un programa que solicite al usuario una matriz cuadrada NxN. Verificar mediante una función recursiva si esta es una matriz identidad y mostrar el resultado. La matriz puede ser de enteros o de flotantes.

prob_03.py Preguntar al usuario una dirección de correo electrónico. Verificar que dicho correo está bien escrito y verificar si dicho correo es uno válido de la Universidad Nacional (@unal.edu.co) REGLAS: nombre@dominio El nombre debe seguir las siguientes reglas: Letras A..Z y a..z (sin tildes ni ñ) Dígitos 0..9Con Solo puede existir un @ Caracteres especiales -. (ninguno de los dos puede ser el primero, ni el último ni pueden estar repetidos inmediatamente) pepito.perez@unal.edu.co y pepito-perez@unal.edu.co son correos válidos pepito..perez@unal.edu.co y pepito--perez@unal.edu.co son correos inválidos -pepitoperez@unal.edu.co y pepitoperez.@unal.edu.co son correos inválidos

prob_04.py Sin utilizar el + o el - ni sino la función code format="python" def sumar_digitos(a,b,base=10): if a<0 or b (base-1) or b>(base-1): raise ValueError('Los digitos deben ser enteros positivos entre 0 y {0}'.format(base-1)) suma = a+b lleva = False if a+b > (base-1): suma = a + b - base lleva = True return suma, lleva code NOTA: esta función no se puede modificar haga una función que sume dos números enteros positivos que el usuario ingrese, tal y como le enseñaron en primero de primaria. Los números entrados pueden estar en cualquier base entre el 2 y el 10. Pregunte al usuario la base en la que va a entrar ambos números. Ejemplo: code ​Entre la base (entre 2 y 10): 7 Entre el primer número: 3452326 Entre el segundo número: 53245 La suma de ambos números es: 3535604 code

prob_05.py Similar la punto 4, pero esta vez implementar la función resta tal y como le enseñaron en segundo de primaria. Los números entrados pueden estar en cualquier base entre el 2 y el 10. Pregunte al usuario la base en la que va a entrar ambos números. El primer número será mayor que el segundo número. Usar las funciones: code format="python" def restar_digitos(a,b, base=10): if a<0 or b (base-1) or b>(base-1): raise ValueError('Los digitos deben ser enteros positivos entre 0 y {0}'.format(base-1)) resta = a-b pedir_prestado = False if a-b < 0: resta = a - b + base pedir_prestado = True return resta, pedir_prestado

def sumar_base(a, base=10): return a + base code NOTA: estas funciones no se pueden modificar Ejemplo: code ​Entre la base (entre 2 y 10): 7 Entre el primer número: 3452326 Entre el segundo número: 53245 La diferencia entre ambos números es: 3366051 code

prob_06.py Escriba un programa que pregunte una cadena y encuentre la subcadena palíndroma más grande que esté dentro de la cadena entrada. Por ejemplo en: code Había una vez un oso llamado Pepe code la cadena palíndroma más grande es " oso " (espacio oso espacio)

=Forma de presentación=
 * Individual

=Forma de calificación= code format="python" import matplotlib.pyplot as plt plt.figure plt.plot([0, 60, 120, 180, 240],[1.2, 1.2, 1, 0, 0], linewidth = 6) plt.axis([0, 240, -0.05, 1.25]) plt.title('Factor de ponderación obtenido en la sustentación', fontsize=16) plt.xlabel('Tiempo utilizado para resolver la sustentación (minutos)', fontsize=12) plt.ylabel('Factor de ponderación', fontsize=12) plt.grid plt.show code
 * Una vez entregados los ejercicios por todos los estudiantes, en clase se seleccionarán de la parte 1 tres ejercicios al azar, de la parte 2 tres ejercicios y de la parte 3 cuatro ejercicios al azar, los cuales serán los únicos calificados. Se calificarán por lo tanto solo 10 ejercicios de los presentados.
 * Cada ejercicio se califica entre 0.0 y 5.0. La nota final de cada entrega es el promedio de las notas obtenidas en los ejercicios seleccionados.
 * En caso que no se haya presentado dicho ejercicio, tendrá una nota de 0 en dicho ejercicio (no importa si se olvidó incluirlo en el correo).
 * En caso que se detecte que hay copia en alguno de los ejercicios presentados (seleccionado o no en clase para calificación) se tendrá como nota un CERO en todo el taller (usted y su compañero).
 * Sin excepción alguna, por cada día de retraso en la entrega se rebajarán 3 décimas de la nota de dicha entrega.
 * Habrá sustentación de los ejercicios. La sustentación será un examen basado en los ejercicios presentados (no necesariamente los seleccionados anteriormente). Incluso si se hizo el ejercicio para el taller y funciona bien, pero no se pudo resolver LA TOTALIDAD de los ejercicios en la sustentación, se tendrá una nota en el taller de CERO. La nota de la sustentación básicamente un coeficiente de ponderación de la nota del trabajo, dado por la siguiente figura:

math Nota = CoefPonderación \times (0.3\text{Nota}_{\text{parte 1}} + 0.4\text{Nota}_{\text{parte 2}} + 0.4\text{Nota}_{\text{parte 3}}) math Asumiendo que Nota 1, Nota 2 y Nota 3 se evaluan sobre 5.0. Con el factor de ponderación de la sustentación, podría obtenerse una nota mayor.
 * La nota del taller será

=Fecha y hora de la sustentación= Grupo 1: Noviembre 4 de 2017, 4:00pm (POR DEFINIR) Grupo 2: Noviembre 7 de 2017, 10:00am (POR DEFINIR)

=Forma de presentación (si no se cumple EXACTAMENTE les rebajo una unidad en la entrega. Seré estricto con respecto a esto)= code 107011_Pepito_Perez (nombre de la carpeta con guión bajo en vez de espacio) | |- 07_01.py       (Nombrar de esta forma los archivos del libro de Trejos) |- 07_03.py       (OJO al 0 que antecede al 1) |- 07_05.py       (observe que son dos dígitos no tres) |- 07_07.py |- 07_09.py |- 07_11.py |- 07_13.py |- ... |- MGG_090.py     (Nombrar de esta forma los archivos del libro de Marzal-Gracia-García) |- MGG_091.py     (OJO al 0 que antecede al 9) \- MGG_130.py     (observe que son tres dígitos) code
 * Se deben entregar archivos .py empaquetados en un solo archivo .zip (no .rar u otro formato) y en una única carpeta
 * La forma de nombrar los archivos será por ejemplo 09_03.py, lo cual quiere decir que se está entregando el ejercicio 3 del capítulo 9 (observe los ceros). Todos los archivos deben ir en una carpeta cuyo nombre es su código+nombre; algo así como:

=Notas adicionales= Si el programa no corre o funciona incorrectamente, se tendrá en cuenta los siguientes criterios de calificación:
 * Si es un error grave en la concepción del algoritmo: Nota 0.0.
 * Si es un error menor en la concepción del algoritmo (por ejemplo, faltó un espacio de identación, se esperaba un número y el usuario entró una cadena, etc), se rebajará la nota de la siguiente forma:
 * Por un error menor: se rebaja la nota en 30%.
 * Por dos errores menores: se rebaja la nota en 50%.
 * Por tres errores menores: se rebaja la nota en 75%.
 * Por cuatro o más menores: NOTA 0.0.
 * El decidir si un programa se encuentra en una categoría o en otra se deja a total criterio del profesor y de los monitores.


 * Ortografía:
 * Por cada error de ortografía se rebajará 1 décima en ese punto (para evitar esto se sugiere activar el corrector de ortografía de su ambiente de desarrollo). Se exceptúa escribir en mayúscula la primera letra de cada comentario y poner el punto final a las líneas de los comentarios.
 * No tildar el nombre de las variables o funciones. Tampoco utilizar la ñ mayúscula o minúscula o las diéresis. La violación de esta norma rebaja -0.5 en el ejercicio propuesto. Los comentarios si deben ir con toda la ortografía del caso, es decir, en los comentarios si se puede utilizar la eñe, las tildes y las diéresis.

code format="python" printf("Hola")  # imprime Hola x += 1          # incrementa la variable x en 1 code ya que son obvios!!.
 * Independientemente del libro y del capítulo del libro, utilizar siempre funciones para realizar actividades como detectar el primer dígito, verificar si un número entero es primo, verificar si un número entero es Fibonacci, etc. Si no se realiza esto, se rebajará en 20% la nota obtenida. **Cuando utilice funciones estas deben retornar algún valor y el único lugar donde está permitido imprimir los resultados es en el bloque principal del programa. Se exceptúa el caso que se hace una función que explícitamente está diseñada para imprimir resultados o datos, algo así como imprimir_matriz(M).**
 * El programa deberá estar **super comentado**, explicando las razones del porqué de su código, no las implementaciones de su código. La falta de comentarios explicativos le rebajará en 50% de la nota en ese punto. Se recomienda leer: http://www.variablenotfound.com/2007/12/13-consejos-para-comentar-tu-cdigo.html y http://www.genbetadev.com/trabajar-como-desarrollador/diez-consejos-para-mejorar-tus-comentarios-de-codigo-fuente. Por favor evite comentarios del tipo:


 * Si el programa imprime información alguna sin contexto se rebajará la nota en 30%.
 * Se debe utilizar una identación de 4 espacios (ajustar la configuración en el IDE utilizado). Si no se sigue esta regla, se rebajará 0.5 unidades en ese punto.
 * Utilización de nombres de identificadores (variables, funciones, listas, etc) inapropiados o sin mucho sentido para quien lo lee (a excepción del programador) y sin comentarios apropiados (-1.0 unidades).
 * Por no utilizar codificación UTF-8 se tendrán -0.5 unidades en el ejercicio en cuestión.
 * Por no alinear los comentarios, cuando estos se encuentren en filas consecutivas, se tendrá -0.5 unidades.
 * Por escribir o acceder a zonas de memoria no permitidas (esto sucede por ejemplo al utilizar incorrectamente las referencias a una lista o indexar incorrectamente una lista/tupla, etc), se tendrá 0 en la nota de ese punto, incluso si el programa aparentemente funciona bien.
 * Revisar las notas de como se debe escribir un buen código de programación (ver las diapositivas 07_-_Consejos_de_programacion_y_normas_de_estilo_con_Python_3.pdf)

code format="python" for i in range(5): i += 2 code o code format="python" for i in range(5): for i in range(3): print(i) code son ciclos for que incumplen la norma anterior. code format="python" if num%2 == 0: return True else: return False code lo correcto sería: code format="python" return num%2 == 0 code
 * Cualquier violación a las siguientes reglas descontarán 50% en la nota obtenida:
 * Si el programa está feo o desordenado en su presentación, se rebajará 50% de la nota en ese punto.
 * El programa no puede exceder en más del 10% del código las 80 columnas (se sugiere activar la opción que muestra la columna # 80 en su ambiente de desarrollo)
 * No se deben utilizar variables globales (a menos que sea extrictamente necesario -- se deja a criterio del monitor/profesor).
 * Se prohíbe expresamente cualquier manipulación de un número convirtiéndolo previamente a una cadena de texto. Todas las operaciones con números deben realizarse utilizando operaciones aritméticas.
 * Se debe colocar un comentario informativo al principio de cada programa que indique la misión que debe realizar el programa que se muestra a continuación.
 * En los bloques try-except o se debe solicitar de nuevo una entrada o se debe corregir el error hecho por el usuario.
 * Se deben utilizar estructuras "try-except" para evitar que el programa falle debido a entradas no esperadas por parte del usuario.
 * Todas las funciones deben tener un docstring asociado. Estas deben estar contenidas entre  y . Las ''' deben ir en reglones separados y estar perfectamente alineadas.
 * No se deben utilizar comparaciones de variables booleanas contra True o False... es decir, no se deben hacer comparaciones como "if es_primo == True" (asumiendo que es_primo es una variable booleana) ya que son confusas e innecesarias.
 * No se deben utilizar comparaciones contra funciones que retornan True o False... es decir, no se deben hacer comparaciones como "if es_primo(n) == True" (asumiendo que es_primo(n) es una función que retorna True si n es primo, de lo contrario retorna False) ya que son confusas e innecesarias.
 * No se debe cambiar la variable índice de un ciclo for dentro del mismo ciclo for: ejemplo
 * No se debe mezclar o alternar las definiciones de función, importación de módulos y sentencias del programa principal.
 * El programa se debe escribir con secciones perfectamente definidas. Por ejemplo, una sección de entrada de datos, otra de procesamiento de datos y otra de presentación de resultados. Estas secciones se pueden mezclar únicamente cuando la legibilidad del programa se mejore.
 * No se deben crear funciones que lea información directamente desde el teclado o que la imprima a la pantalla, excepto si la función se crea explícitamente con el objetivo de leer/imprimir dicha información. Por ejemplo es válido crear funciones como leer_matriz o imprimir_matriz, pero no es válido crear funciones como es_primo la cual imprima desde la misma si un valor dado es primo o no.
 * Cuando una función que retorna el resultado de un cálculo numérico, dicha función no puede retornar cadenas para indicar que hubo un error. Si la función falla, debe fallar con una excepción que usted lance.
 * Se debe informar al usuario sobre todas las situaciones anómalas posibles. El programa no debe quedarse callado frente a ciertas entradas incorrectas o que no producen los resultados esperados.
 * No se debe usar la palabra reservada pass "indiscriminadamente". Si se utiliza en ciertas construcciones con el objeto de mejorar la claridad del código, esa bien.
 * No se pueden utilizar estructuras if similares a:

o a code format="python" if num%2 == 0: es_divisible_2 = True else: es_divisible_2 = False code lo correcto sería: code format="python" es_divisible_2 = num%2 == 0 code


 * No usar variables con asignaciones enteras (como es_primo = 1 o es_primo = 0) que podrían perfectamente reemplazarse con variables booleanas (en tal caso la forma correcta sería es_primo = True o es_primo = False).

A partir de la tercera entrega del Taller 1, se tendrán en cuenta las siguientes reglas:
 * Por escribir código innecesario, se rebajará la nota en 30%.
 * Por escribir código extremadamente ineficiente, se rebajará la nota en 20%.

=Consejo= Si quieren aprender en verdad a programar intenten ustedes mismos hacer los ejercicios de forma autónoma (sin ayuda de los compañeros de clase o de alguien más). Por lo tanto eviten en lo posible los grupos de trabajo. Se prohíbe cualquier tipo de "colaboración" externa. Aprender a programar es como aprender a nadar. Uno no aprende a nadar viendo los campeonatos de natación en la TV. Hay que tirarse al agua para en verdad volverse un nadador. De alguna forma la sustentación es tan estricta porque solo le otorga los puntos obtenidos si usted le muestra al profesor que adquirió la habilidad para programar.

=Nota con respecto al Taller 2= Para poder presentar el Taller 2 se deberán cumplir el siguiente requisito: En caso que lo anterior no se cumpla se le asignarán 12 nuevos ejercicios; de dicho taller adicional se seleccionarán al azar 3 ejercicios que se computarán con los ejercicios ya presentados. Adicionalmente, se repetirá la sustentación previa entrega de los ejercicios adicionales. Esta acción se repetirá hasta que aprueben ambas condiciones. Si al finalizar el semestre no han aprobado dichas condiciones, no podrá presentar el Taller 2. La nota recibida en el Taller 2 será la misma nota del Taller 1.
 * Obtener en la sustentación un factor de ponderación por tiempo mayor o igual a 0.8

=Nota (para Diego)= Imprimir el taller con el comando de consola de Linux: code format="bash" for f in MGG_240.py 09_20.py 10_50.py; do   echo "-" echo "$f" echo "-" for dir in *; do       if test -d "$dir"; then echo ">>>> $dir <<<<" cd "$dir" iconv -c -f utf-8 -t ISO-8859-1 "$f" > "_$f" a2ps "_$f" --prologue=fixed --highlight-level=normal --landscape --tabsize=4 --file-align=fill --header=%c --output="${f%.*}.pdf" a2ps "_$f" --prologue=fixed --highlight-level=normal --landscape --tabsize=4 --file-align=fill --header=%c --sides=duplex rm "_$f" cd .. fi           done done code