Professional Documents
Culture Documents
1
Programando con Python: Problemario López Marín, Miguel
Ejercicios propuestos y
resueltos desde Cero,
sumergidos en el
mundo de Python + GUI
69 Recursividad
70 Ejercicio 0021: Servicio de encomiendas por zonas, cálculos
varios, recursividad, condiciones
CAPITULO II
74 Bucles
75 Ejercicio 0022: Mostrar las letras que tiene el nombre de una
persona, una letra a la vez
75 Ejercicio 0023: Dado un nombre, determinar el tamaño(n) de la
cadena, y mostrarlo (n) veces
Más funciones en Python
76 Eval
77 Range
78 Break
79 try except
Tratamiento de cadenas
81 Función len
82 Concatenar cadenas
82 Convertir cadena a mayúsculas, función upper
83 Convertir cadena a minúsculas, función lower
83 Eliminar ultimo carácter de una cadena
83 Mostrar una cadena en forma de lista
84 Convertir una cadena a una lista
Pág. 7
Programando con Python: Problemario López Marín, Miguel
84 Contadores y Acumuladores
85 Ejercicio 0024: Realizar un programa que permita contar los
números pares entre el 50 y el 100 y sumar estos valores
85 Variables Booleanas
86 Validaciones
86 Ejercicio 0025: Validación de un email, varios criterios
89 Ejercicio 0026: Desarrollo de una calculadora básica
91 Ejercicio 0027: rutina de clave de acceso
91 Ejercicio 0028: Clave de acceso con control de intentos fallidos
93 Ejercicio 0029: Programa que sume los Números ingresados por
teclado
94 Ejercicio 0030: Calcular la nota definitiva de un alumno, con el
promedio de 5 notas.
94 Ejercicio 0031: Programa que muestra un nombre tantas veces se
solicite
95 Ejercicio 0032: Muestra una tabla de multiplicar elegida por el
usuario
96 Ejercicio 0033: Genera y muestra la tabla de multiplicar completa
96 Ejercicio 0034: Programa que permita calcular la nota final de n
alumnos y su literal
98 Ejercicio 0035: Programa que permita calcular el número mayor y
menor de una lista
Pág. 8
Programando con Python: Problemario López Marín, Miguel
Prefacio
La Programación es un mundo fascinante para todo aquel que se
sumerge y se deja empapar de ese gusto, como las demás cosas de la
vida, programar también es un arte; se debe tener presente que algunas
personas desarrollan ciertas destrezas en algunas áreas del conocimiento
mientras que para otros esas destrezas y habilidades se ponen cuesta
arriba. Programar es como el que descubre que le gusta pintar, al cantante
que le gusta la música y al sastre la costura.
Las destrezas y habilidades para Programar se desarrollan
progresivamente y por el empeño, algunas se dan de forma empírica otras
por ser constante, perseverante; aquí en este punto se permite afirmar
que para desarrollar el potencial y aptitudes necesarias en programación
hay que dedicarse, por lo general no será un arte que se desarrolle de la
noche a la mañana, pero a quien le gusta y le apasiona, va resaltar y
seguramente será exitoso; este Texto está orientada a cualquier persona
que quiera iniciarse en la Programación y especialmente a mis Alumnos de
Programación I de la carrera de Ingeniería en Informática.
Vale acotar, que, para efectos de este Texto, es deseable que el
alumno distinga algunos aspectos básicos al menos conceptualmente, tales
como: algoritmo, resolución y planteamiento de ejercicios básicos en
seudocódigo, variables, estructuras secuenciales, bucles, arreglos y
conocimientos básicos en matemática a nivel de bachillerato.
El Texto fue concebido en aras de contar con un material de
consulta, actualizado y sobre todo desarrollado, desde el seno de Nuestra
querida Universidad, tomando en cuenta las diversas experiencias del
autor en Programación y en el dictado del Subproyecto Algoritmo y
Programación I, de tal manera que todo discente y docente en esta etapa,
pueda tomar este Texto como una referencia y material de apoyo para
alcanzar el logro de los objetivos que se desean en Programación I e
igualmente poder despejar dudas, inherentes al abordaje y desarrollo de
un ejercicio de Programación que este comprendido en este Nivel.
LOPEZ MARIN, Miguel Ángel
Pág. 12
Programando con Python: Problemario López Marín, Miguel
Metodología empleada
Python Interactivo
Python permite ejecutar código directamente desde su consola
interactiva, apenas abrimos Python >>> el indicador también llamado
prompt, está listo para recibir instrucciones y dar respuestas;
excepto editar cómodamente, esa tarea se deja al editor.
La Simplicidad de Python
Antes de empezar debemos tener claro un aspecto que se refiere a
las Características Básicas de Python una de ellas es que maneja un tipado
dinámico y su código se interpreta no se compila. Significa que el código
se traduce línea por línea a lenguaje máquina, mientras se va ejecutando,
en lenguajes compilados aparte que las variables a usar, todas se declaran
previamente, primero se traduce a lenguaje maquina todo el
codigo(compilación) y se guarda un archivo para su ejecución cuando se
requiera.
En Lenguajes de Programación como C++, si nosotros deseamos
sumar dos números leídos por teclado y mostrar el resultado sería algo así:
Ejemplo. C++
Pág. 18
Programando con Python: Problemario López Marín, Miguel
Ejemplo. Python
resultado un 30, y eso pasa por que en Python los datos son tratados tal
como se observan según el valor asignado a la variable, si le asignas una
cadena, lo tratara como cadena y así para los otros tipos de datos como
los reales.
En resumidas cuentas, y sin caer en tecnicismo, es más sencillo,
practico y un poco más innovador para alguien que se inicie en
Programación emplear Python. Vale aclarar que más allá de la simplicidad
este Lenguaje es extremadamente potente y grandes de la Tecnología
como Amazon, Google, NASA, Instagram por nombrar algunos emplean en
buena parte de su plataforma código Python, sobre todo del lado de sus
servidores, Sublim edit3 y Thonny están escritos en Python.
Sintaxis en Python
Aunque poco a poco podremos ir observando y apreciando la forma
de escribir código en Python vale aclarar que, a diferencia de otros
lenguajes, en Python cada línea NO finaliza en punto y com a
";"simplemente no lleva así de sencillo, tam poco usa llaves "{ } " , en
cambio emplea algo que se denomina indentación, sangrado o
tabulación de 4 espacios para identificar que líneas van dentro de un
bloque de instrucciones o condiciones. En un entorno profesional como
Spyder(Anaconda), incluso el mismo Sublim Text3 o el minimalista Thonny,
automáticamente él te deja el sangrado correspondiente al iniciar un nuevo
bloque que va dentro de otra condición o criterio. Aunque la decisión final
y la lógica del código depende del programador, las asistencias en el
desarrollo no son la letra final.
En Python no es lo mismo escribir hola, HOLA, Hola, al menos no
empleándolo como variables o en funciones, este lenguaje es
sensible al uso de mayúsculas y minúsculas y a diferencia de otros
lenguajes, permite el uso de mayúsculas y minúsculas, caso distinto
en el uso y empleo de palabras reservadas e importación de módulos
donde se emplea en minúsculas, hay ciertas excepciones que no
necesariamente vienen al caso como al emplear el Modulo de Tkinter que
Pág. 20
Programando con Python: Problemario López Marín, Miguel
es la Interfaz gráfica por defecto que viene con Python allí buena parte de
su sintaxis es Mixta( emplea mayúsculas y minúsculas).
if a > b:
mayor=a
Capítulo I
Variables
Identificadores, Asignación, Tipos de datos,
Inicialización de variables
Operadores:
Aritméticos, de comparación y Lógicos
Condiciones
Simples, dobles, anidadas y compuestas
Recursividad
Pág. 22
Programando con Python: Problemario López Marín, Miguel
Variables
Una variable es un espacio reservado en la memoria del equipo que
permite almacenar un tipo de dato. El uso de variables es imprescindible
en la programación para un manejo eficaz de la información. Vale recordar
que existen variables locales y variables globales, las primeras solo
existen en la función donde son declaradas y las globales pueden ser
empleadas en cualquier lugar de un bloque de código o instrucciones.
Identificadores
Al hablar de variables tocamos también un tema asociado los
identificadores, estos se refieren al nombre que le damos a una variable
Pág. 23
Programando con Python: Problemario López Marín, Miguel
Asignación de datos
Simple
Para asignar un dato a una variable basta con escribir la variable,
siguiendo la lógica de sintaxis para identificarla, luego escribimos el signo
igual y escribimos su valor, si es una cadena se coloca entre comillas.
cadena="Miguel Angel"
entero= 25
numeroreal=250.75
Múltiple
También se permite efectuar una asignación múltiple con igual y
distintos tipos de datos, ilustremos el ejemplo en el prompt:
>>> valor_entero,cadena,numero_real=30,"Miguel Lopez",0.75
>>> valor_entero
30
>>> cadena
Pág. 24
Programando con Python: Problemario López Marín, Miguel
'Miguel Lopez'
>>> numero_real
0.75
>>>
Tipos de datos
En Python al igual que en otros lenguajes de Programación
contamos con diversos tipos de datos, entre los más usados tenemos:
Cadenas (str)
Enteros (int)
Pág. 25
Programando con Python: Problemario López Marín, Miguel
Reales (float)
Booleanos(True, False)
También podemos ver el tipo de dato que tiene una variable, con la
función type, veamos un ejemplo en el prompt:
>>> a=5
>>> b="miguel"
>>> c=50.45
>>> type(c)
<class 'float'>
>>> type(b)
<class 'str'>
>>> type(a)
<class 'int'>
>>> d=True
>>> type(d)
<class 'bool'>
>>>
Inicialización de variables
Hace mención a la asignación previa de una variable con algún dato,
es frecuente por ejemplo que una variable que se emplee para contar de
uno en uno, se le asigne un valor inicial de cero, ejemplo contador=0,
también pudiera ser con una variable que guarde que acumule una
sumatoria, ejemplo acumulador=0. Además, vale destacar que, si una
variable no se inicializa y esta se invoca sin un valor previo o ajeno a un
proceso de cálculo o asignación, esta dará un error en tiempo de ejecución,
pero no de sintaxis, ya que Python es un lenguaje interpretado.
>>> contador=0
>>> acumulador=0
Pág. 26
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0001.
A continuación, vamos a mostrar el famoso ¡Hola mundo!, punto
de partida en casi que todos los lenguajes de programación, como leí
alguna vez, "…es una tradición entre programadores ".
Código en el editor:
Errores comunes
Veamos algunos errores sintácticos y otros en tiempo de ejecución,
desde de la consola interactiva haremos la ilustración, es igual de aplicable
Pág. 30
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0002.
Escribir un programa que permita sumar 2 Números y mostrar el
resultado
Para este ejercicio no se leerá ninguna variable por teclado,
simplemente procederemos por vía de asignación, le daremos un valor a
la variable que llamaremos (a) y otro valor a la variable que llamaremos
(b), seguidamente a una variable que denominaremos suma le
asignaremos el resultado de sumar lo que hay en (a) + lo que hay en (b).
Pág. 37
Programando con Python: Problemario López Marín, Miguel
#Código en el editor:
a=50
b=30
suma=a+b
print(suma,"El resultado de sumar: ",a, " +", b)
Ejercicio 0003.
Desarrollar un programa que permita sumar 2 números leídos por
teclado y mostrar el resultado
valor2=input()
suma=int (valor1)+ int (valor2)
print("La suma de :"+valor1+"+"+ valor2+" es="+str(suma))
Ejercicio 0004.
Escribir un programa que permita leer nuestro nombre y saludarnos
#Código en el editor:
minombre=input("Dime Tu Nombre:")
print("Hola, ",minombre, ", Bienvenido a Programando con Python")
La función input se emplea para leer datos, vale recordar que todo
lo que leemos en Python es una cadena a menos que indiquemos lo
contrario, el único argumento que le podemos pasar a input al menos en
este texto, será un mensaje al leer la variable con eso nos ahorraríamos
escribir un mensaje o una línea de código.
Pág. 40
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0005.
Escribir un programa que permita obtener el promedio de las
calificaciones de un estudiante, considerar cuatro exámenes durante el
semestre, los cuales tienen la misma ponderación
#Código en el editor:
print ("Ingresar las 4 calificaciones")
a= float(input())
b= float(input())
c= float(input())
d= float(input())
pro=(a+b+c+d)/4
print(pro, "Es el Promedio de las 4 Calificaciones")
Pág. 42
Programando con Python: Problemario López Marín, Miguel
Programación en escalera
A medida que se vaya puliendo, practicando cada vez más, intentara
resolver programas de mayor complejidad y requerimientos. Seguramente
aparte de los aquí propuestos y resueltos, desde aquí le sugiero, que vaya
programando como si estuviese ascendiendo en una escalera, poco a poco,
no ir de prisa, cada vez que vaya agregando nuevas instrucciones vaya
probando su código, de tal manera, si comete un error, podrá saber
aproximadamente donde ubicarlo y tal vez como solventarlo, ahorrando
tiempo, esfuerzo y desgaste mental que a la postre puede terminar
afectando su avance en programación o hacerle perder el ánimo. Esto en
palabras mayores se denomina control de versiones.
Además, si siente que puede cometer una imprudencia que ponga
en riesgo lo que lleva, guarde con otro nombre el código en el que está
experimentando, de tal manera, que lo que lleva bien no lo pierda o no
sufra para continuar hasta donde iba bien; lo anterior se recomienda en
caso de que lo nuevo que está probando no lo convenza o haya
entorpecido todo lo que llevaba bien.
Ejercicio 0006.
Escribir un programa que permita resolver lo siguiente: Un
productor de leche lleva el registro de lo que produce en litros, pero cuando
entrega le pagan en galones. Codifique la solución que ayude al productor
a saber cuánto recibirá por la entrega de su producción de un día (1 galón
= 3.785 litros).
#Código en el editor:
Pág. 43
Programando con Python: Problemario López Marín, Miguel
galon=3.785
print ("Ingrese N° de Litros de Producción de leche: ")
litros= float(input())
print ("Ingrese el Monto de la paga por Galón: ")
valor_pago= float(input())
conversion_litros=litros/galon
pago_de_leche=conversion_litros*valor_pago
print(pago_de_leche, "Es el Monto a Obtener por la producción de:
",litros, "litros de leche")
print(conversion_litros,": Serian el total de galones")
La cláusula return
Cada vez que nuestros programas se encuentren con la función
return, el flujo de ejecución abandonara inmediatamente la función donde
esta se encuentre, volverá al punto donde se invocó, sino existiese más
flujo de ejecución, nuestro programa finalizara, esto ocurre aun existiendo
más instrucciones por ejecutar dentro de la función. Además, la función
return permite devolver valores al punto de invocación de una función,
otro de los usos de esta cláusula es verificar funciones y abortarlas para
comprobar errores.
Ejercicio 0007.
Desarrollar un Programa que permita calcular la edad de una
persona, dado su fecha de nacimiento
#Función para calcular la edad de una persona
Pág. 45
Programando con Python: Problemario López Marín, Miguel
def calcular_edad(fecha_nac,ano_actual):
edad=ano_actual-fecha_nac
return edad
Ejercicio 0008.
Calcular y mostrar el mayor de 3 Números
#Código en el editor
def calcular_mayor(a,b,c):
mayor=a
if b> mayor:
mayor=b
if c> mayor:
mayor=c
return mayor
Ejercicio 0009.
Veamos la segunda forma y aquí agregaremos otra nueva función
de Python str, la cual permite convertir en cadena un valor:
#Código en el editor
def calcular_mayor():
a=int(input("Indique el valor a: "))
b=int(input("Indique el valor b: "))
c=int(input("Indique el valor c: "))
mayor=a
if b> mayor:
mayor=b
if c> mayor:
mayor=c
return a,b,c,mayor
x1,x2,x3,may=calcular_mayor()
Indique el valor a: 30
Indique el valor b: 15
Indique el valor c: 80
80 Es el Mayor de 30, 15, 80
>>>
if nota>15:
print("Sobresaliente")
elif nota >=10:
print("Aprobado")
else:
print("Reprobado")
Ejercicio 0010.
Realizar un Programa para determinar la nota final que obtendrá un
alumno considerando que realiza tres exámenes, de los cuales el primero
y el segundo tienen una ponderación de 25%, mientras que el tercero de
50%.
#Código en el editor:
Pág. 50
Programando con Python: Problemario López Marín, Miguel
Para la solución del ejercicio anterior nos hemos auxiliado con una
función en la parte principal, además hemos utilizado la función print y a
esta le hemos pasado como parámetro nuestra función principal que lee
los datos, hace los cálculos y retorna el valor, al emplear la función print
en medio del llamado nos aseguramos que el valor que retorne se muestre
junto con los demás argumentos indicados en el print.
Sería incorrecto
-----
-----
recepción(4,6,9) # Envia 3 argumentos
Ejercicio 0011.
Efectuar un programa para determinar aproximadamente cuántos
meses, semanas, días y horas ha vivido una persona, dado la edad de esta.
#Código en el editor:
def tiempo_devida(fn,actual):
edad=actual-fn
meses=edad*12
semanas=edad*52
dias=edad*365
horas=dias*24
return edad,meses,semanas,dias,horas
Ejercicio 0012.
Escribir un programa para determinar si un número es positivo o
negativo.
#Código en el editor
numero=int(input("Indicar Numero:"))
if numero>0:
print("Numero es Positivo")
else:
print("Numero es Negativo")
Ejercicio 0013.
Realizar un programa para determinar cuánto se debe pagar por
equis cantidad de lápices considerando que si son 1000 o más el costo es
de 85; de lo contrario, el precio es de 90.
#Código en el editor
def calculo_pago(cantidad):
if cantidad>=1000:
costo=85
else:
costo=90
pago=costo*cantidad
return pago
#Versión 01
a=int(input("Valor de A: "))
b=int(input("Valor de B: "))
c=int(input("Valor de C: "))
mayor=a
if b > mayor:
mayor=b
if c > mayor:
mayor=c
print(mayor," es el Mayor de los 3 Números")
#Versión 02
a=int(input("Valor de A: "))
b=int(input("Valor de B: "))
c=int(input("Valor de C: "))
#Versión 03
a=int(input("Valor de A: "))
b=int(input("Valor de B: "))
c=int(input("Valor de C: "))
if a > b:
mayor=a
else:
mayor=b
if c > mayor:
mayor=c
Ejercicio 0014.
Una empresa dedicada a ofrecer banquetes; sus tarifas son las
siguientes: el costo de platillo por persona es de $95.00, pero si el número
de personas es mayor a 200 pero menor o igual a 300, el costo es de
$85.00. Para más de 300 personas el costo por platillo es de $75.00. Se
requiere un Programa que genere el presupuesto que se debe presentar a
los clientes que deseen realizar un evento.
#Código en el editor
def entradas():
personas=int(input("Numero de Personas para el Evento:?"))
if personas>300:
costo_platillo=75
elif personas>200 and personas <=300:
costo_platillo=85
Pág. 58
Programando con Python: Problemario López Marín, Miguel
else:
costo_platillo=95
def generar_presupuesto():
a,b=entradas()
presupuesto=a*b
presupuesto=round(presupuesto,2)
generar_presupuesto()
Ejercicio 0015.
La asociación de vinicultores tiene como política fijar un precio inicial
al kilo de uva, la cual se clasifica en tipos A y B, y además en tamaños 1
y 2. Cuando se realiza la venta del producto, ésta es de un solo tipo y
tamaño, se requiere determinar cuánto recibirá un productor por la uva
que entrega en un embarque, considerando lo siguiente: si es de tipo A,
se le cargan 20$ al precio inicial cuando es de tamaño 1; y 30$ si es de
tamaño 2. Si es de tipo B, se rebajan 30$ cuando es de tamaño 1, y 50$
cuando es de tamaño 2. Realice un Programa determinar la ganancia
obtenida y la perdida.
#Código en el editor
def tamano_tipo():
def calcular_pago(kilos,precio,tipo,tam):
if tipo ==1:
if tam==1:
precio=precio+20
else:
precio=precio+30
else:
if tam==1:
precio=precio-30
else:
precio=precio-50
pago=precio*kilos
return pago
tamano_tipo()
Ejercicio 0016.
Desarrollar programa que resuelva lo siguiente: Se requiere
determinar cuánto se le debe cobrar a cada alumno por el servicio de un
Pág. 60
Programando con Python: Problemario López Marín, Miguel
#Código en el editor
def viaje_alumno():
costo=0
n_alumnos=int(input("N° de Alumnos para el Viaje:"))
if n_alumnos>=100:
costo=65
elif n_alumnos>=50 and n_alumnos <=99:
costo=70
elif n_alumnos>=30 and n_alumnos<=49:
costo=95
else:
costo=4000/n_alumnos
pago=4000
Pág. 61
Programando con Python: Problemario López Marín, Miguel
pago=costo*n_alumnos
pago=round(pago,2)
return costo,pago
def mostrar_salidas():
xreturn,yreturn=viaje_alumno()
print(xreturn,"Costo por Alumno del Viaje")
print("Costo Total del Viaje: ",yreturn)
mostrar_salidas()
Si decimos a=33.3333333
a=round(a,2)
a=33.33 este sería el Nuevo valor de round, tomando la parte
entera y solo dos decimales
Ejercicio 0017.
Un centro de Comunicaciones, el cobro es por el tiempo que dura la
llamada, de tal forma que los primeros cinco minutos cuestan $ 1.00 c/u,
los siguientes tres, 80$ c/u, los siguientes dos minutos, 70$ c/u, y a partir
del décimo minuto, 50$ c/u.
Además, se carga un impuesto de 3 % cuando es domingo, y si es
día hábil, en turno matutino, 15 %, y en turno vespertino, 10 %. Realice
Pág. 62
Programando con Python: Problemario López Marín, Miguel
un Programa para determinar cuánto debe pagar por cada concepto una
persona que realiza una llamada.
#Código en el editor
dias="1 2 3 4 5 6 7"
dias_habiles="1 2 3 4 5 6"
turnos="1 2"
def datos_llamada_impuesto():
def calcular_impuesto():
if dia in dias:
if dia in dias_habiles:
if turno in turnos:
if turno=="1":
impuesto=0.15
else:
impuesto=0.10
else:
impuesto=0.03
return impuesto
def cobro(impuesto,tiempo):
p5=0
s3=0
s2=0
diferencia=0
if tiempo>10:
p5=5
s3=240
s2=140
diferencia=(tiempo-10)*50
elif tiempo >8 and tiempo <=10:
p5=5
s3=240
diferencia=(tiempo-8)*70
elif tiempo>5 and tiempo >=8:
p5=5
diferencia=(tiempo-5)*80
else:
p5=tiempo*1
pago=(p5+s3+s2+diferencia)*(1+impuesto)
pago=round(pago,2)
return pago
impuesto,tiempo=datos_llamada_impuesto()
print(cobro(impuesto,tiempo)," :Monto a CANCELAR POR LLAMADA")
Pág. 64
Programando con Python: Problemario López Marín, Miguel
#Otro ejemplo
>>> nombres="miguel pedro jose maria valentina andrea".split()
>>> nombres
['miguel', 'pedro', 'jose', 'maria', 'valentina', 'andrea']
>>> buscar="miguel"
>>> resultado= buscar in nombres
>>> resultado
True
>>>
Ejercicio 0018.
Desarrollar un Programa para lo siguiente: Una compañía de viajes
cuenta con tres tipos de autobuses (A, B y C), cada uno tiene un precio
Pág. 65
Programando con Python: Problemario López Marín, Miguel
por kilómetro recorrido por persona, los costos respectivos son $2.0, $2.5
y $3.0. Se requiere determinar el costo total y por persona del viaje
considerando que cuando éste se presupuesta debe haber un mínimo de
20 personas, de lo contrario el cobro se realiza con base en este número
límite.
def ingreso_datos():
tipo=int(input("Tipo de Autobus: 1. A 2. B 3. C: "))
personas= int(input("N° de Personas: "))
km= int(input("Km a viajar: "))
return tipo,personas,km
def calculo_pago(tipo,personas,km):
if tipo==1:
precio_km=2.0
elif tipo==2:
precio_km=2.5
else:
precio_km=3.0
if personas>=20:
cobro_viaje=km*precio_km*personas
cobro_individual=cobro_viaje/personas
else:
cobro_viaje=km*precio_km*20
cobro_individual=cobro_viaje/personas
Pág. 66
Programando con Python: Problemario López Marín, Miguel
cobro_individual=round(cobro_individual,2)
return cobro_viaje, cobro_individual
tipo,personas,km=ingreso_datos()
cv,ci=calculo_pago(tipo,personas,km)
print(cv," :Costo total del Viaje ")
print("Costo Individual por Persona: ", ci)
Ejercicio 0019.
El consultorio de un Médico, tiene como política cobrar la consulta
con base en el número de cita, de la siguiente forma:
Las tres primeras citas a $200.00 c/u.
Las siguientes dos citas a $150.00 c/u.
Las tres siguientes citas a $100.00 c/u.
Las restantes a $50.00 c/u, mientras dure el tratamiento.
#Código en el editor
Pág. 67
Programando con Python: Problemario López Marín, Miguel
def cobro_consulta(n_consulta):
if n_consulta>8:
valor=50
tratamiento=1200+((n_consulta-8)*valor)
elif n_consulta>5 and n_consulta<=8:
valor=100
tratamiento=900+((n_consulta-5)*valor)
elif n_consulta>3 and n_consulta<=5:
valor=150
tratamiento=600+((n_consulta-3)*valor)
else:
valor=200
tratamiento=n_consulta*valor
return valor,tratamiento
valor,costo_tratamiento=cobro_consulta(n_consulta)
Ejercicio 0020.
Resolver con un programa: Una Fabrica produce artículos con claves
(1, 2, 3, 4, 5 y 6). Se requiere calcular los precios de venta, para esto hay
que considerar lo siguiente:
Costo de producción = materia prima + mano de obra + gastos de
fabricación.
Precio de venta = costo de producción + 45 % de costo de
producción.
Pág. 68
Programando con Python: Problemario López Marín, Miguel
if clave==2 or clave==5:
costo_fabricacion=materia_prima*0.30
elif clave==3 or clave==6:
costo_fabricacion=materia_prima*0.35
else:
costo_fabricacion=materia_prima*0.28
costo_produccion=materia_prima+costo_mano_obra+costo_fabricaci
on
precio_venta=costo_produccion*1.45
return precio_venta
def datos_entrada():
clave=int(input("Indicar Clave:\n"))
materia_prima=int(input("Costo de Materia Prima:"))
return clave, materia_prima
clave,materia_prima=datos_entrada()
print(calcular_precio_venta(clave, materia_prima)," :Precio de
Venta")
Recursividad
En Programación se denomina recursividad al hecho de que una
función se pueda llamar así misma, esto es perfectamente válido y se debe
tener sumo cuidado al efectuarse para que los resultados y el
comportamiento de esta recursividad cumpla su propósito, por lo general
suele aplicarse en situaciones que requieren validaciones, sin incluir este
procedimiento en ningún bucle, a continuación, veremos un ejercicio
donde se pone de manifiesto el uso de la recursividad.
Pág. 70
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0021.
Una compañía de paquetería internacional tiene servicio en algunos
países de América del Norte, América Central, América del Sur, Europa y
Asia. El costo por el servicio de paquetería se basa en el peso del paquete
y la zona a la que va dirigido. Parte de su política implica que los paquetes
con un peso superior a5 kg no son transportados, esto por cuestiones de
logística y de seguridad. Realice un programa para determinar el cobro por
la entrega de un paquete o, en su caso, el rechazo de la entrega. Regirse
por la siguiente tabla
Zona Ubicación Costo/gramo
Zona Ubicación Costo/gramo
#Codigo en el editor
zonas="1 2 3 4 5"
def costo_gramo(zona,peso):
pago=0
condicion=-1
peso=peso*1000
if zona in zonas:
if peso<=5000.0:
if zona=="1":
costo=11.0
elif zona=="2":
costo=10.0
elif zona=="3":
Pág. 71
Programando con Python: Problemario López Marín, Miguel
costo=12.0
elif zona=="4":
costo=24.0
else:
costo=27.0
pago=costo*peso
condicion=1
else:
pago=0
condicion=-1
else:
#Aplicando recursividad en caso de que Ingrese una Zona No Valida
#Volvemos a llamar función de ingresar datos y luego la función se
llama así misma para proceder a su validación
zona,peso=datos_entrada()
pago,condicion=costo_gramo(zona,peso)
return pago, condicion
def datos_entrada():
zona=input("1. America del Norte 2. America Central 3. America
del Sur 4. Europa 5. Asia:\n")
peso=float(input("Indique el Peso:"))
return zona, peso
zona,peso=datos_entrada()
pago,condicion=costo_gramo(zona,peso)
if condicion==-1:
print("ENVIO RECHAZADO, EXCEDE EL PESO")
else:
print(pago,"Costo del ENVIO")
Pág. 72
Programando con Python: Problemario López Marín, Miguel
CAPITULO II.
Bucles
Funciones:
Tratamiento de cadenas:
Variables booleanas
Contadores y Acumuladores
Validaciones
Módulos o Librerías:
import, random, time
Bucle Sintaxis
Repita mientras while condición:
instrucciones
for i in range(n):
instrucciones
Repita para
for i in "ejemplo":
instrucciones
Ejercicio 0022.
Mostrar las letras que tiene el nombre de una persona, una letra a
la vez
#Código en el editor
for x in "Miguel Ángel López Marín":
print(x)
Ejercicio 0023.
Dado un nombre, determinar el tamaño(n) de la cadena, y mostrarlo
(n) veces
Pág. 76
Programando con Python: Problemario López Marín, Miguel
#Código en el editor
Eval
Una de las funciones más todoterreno con que cuenta el Lenguaje
Python, esta función permite resolver una expresión matemática alojada
en una variable de tipo cadena, veámoslo con un ejemplo en el prompt:
>>> variable="5+472*5"
>>> eval(variable)
2365
>>>
>>> z=eval(a)
>>> z
6.0
>>>
Range
0
1
2
3
4
>>>
3
4
Pág. 78
Programando con Python: Problemario López Marín, Miguel
5
6
>>>
Si de repente necesitamos que el ciclo repita para incremente de 2
en 2 en cada vuelta, lo haríamos de la siguiente manera:
3
5
7
9
11
>>>
Break
La función break nos permite interrumpir el proceso y salir del ciclo
que se esta ejecutando en ese momento, veámoslo con una ilustración en
el prompt:
>>> for x in range(3,12,2):
print(x)
if x>5:
break
3
5
7
3
>>>
Try Except:
Cuando desarrollamos un programa, este puede generar un error si
ingresamos un tipo de datos que no corresponden con lo que
programamos y puede provocar una interrupción en su ejecución. También
en algunos casos se requiere que nuestro programa haga determinada
actividad o alerte que se produjo un error. Para estos casos en Python
contamos con la Funcion Try Except, cual permite manejar los errores de
Pág. 80
Programando con Python: Problemario López Marín, Miguel
>>> try:
a=int(input("Ingresa un valor:"))
b=int (input ("Ingresa otro valor:"))
suma=a+b
print(suma)
except:
print("Introdujo un Valor No valido")
Ingresa un valor:5
Ingresa otro valor:h
Introdujo un Valor No valido
>>>
Tratamiento de cadenas
Len
Esta función permite conocer el tamaño de una cadena, una lista,
diccionario también llamado arreglos asociativos en otros lenguajes de
programación. Ilustremos esta función en el prompt:
VENEZUELA
VENEZUELA
VENEZUELA
VENEZUELA
VENEZUELA
VENEZUELA
VENEZUELA
VENEZUELA
VENEZUELA
>>>
Pág. 82
Programando con Python: Problemario López Marín, Miguel
Quedaría así, unir las dos cadenas del ejemplo anterior con un
espacio entre estas:
>>> print(nombres+" "+apellidos)
Miguel Angel Lopez Marin
>>>
>>> marcas=marcas.split()
>>> for x in marcas:
print(x)
ferrari
toyota
honda
mazda
porshe
maclaren
jaguar
>>>
Contadores y Acumuladores
En programación en muchas ocasiones un problema requiere que
contemos o acumulemos una suma o multiplicación, para ello es necesario
hacerlo dentro de un bucle, dadas ciertas condiciones, un contador su valor
por lo general se incrementa de 1 en 1, y un acumulador su valor se
incrementa sumando el contenido original más el valor que deseamos
sumar a lo acumulado, tantas veces como lo programemos. Ilustremos el
proceso con ambas opciones.
Pág. 85
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0024.
Realizar un programa que permita contar los números pares entre
el 50 y el 100 y sumar estos valores.
#código en el editor
cp=suma=0
for x in range (50,100):
if x%2==0:
cp+=1
suma+=x
print(cp,"Total Numeros Pares, y Total Suma:", suma)
Variables booleanas
Hemos hablado de diversos tipos de datos, enteros, reales, cadenas,
y de variables que almacenan estos datos, pero hay un tipo de variables
que almacena un dato de tipo booleano verdadero o falso, a las variables
que almacenan este tipo de datos se le puede llamar variable boleana, su
valor será únicamente True o False. Ilustremos un ejemplo en el prompt:
>>> a=5>5
>>> a
False
Pág. 86
Programando con Python: Problemario López Marín, Miguel
>>>
Veamos otro ejemplo, un poco más completo:
>>> a=10<20
>>> a
True
>>> if a==True:
print("10 es Menor que 20")
else:
print("10 es mayor 20")
10 es Menor que 20
>>>
Validaciones
Es un bloque de código que permite que una variable o
procesamiento de información se comporte y reciba el tipo de dato que
corresponda, para ello se usan ciclos repetitivos, recursividad e incluso
también se puede acompañar de un manejo de errores para invocar otra
vez el llamado de la función o bloque de código donde se produce el error
o el ingreso del dato errado. Ilustremos este concepto con un ejercicio
práctico, veámoslo:
Ejercicio 0025.
Se requiere un programa o modulo en Python que valide el ingreso
de un email, para ello tome en cuenta lo siguiente, que contenga un
símbolo de arroba (@) y que este ubicado lógicamente, un punto(.), este
corresponde al del dominio del proveedor del correo, que su extensión en
caracteres sea mayor a 12 caracteres. Tomar en cuenta que se debe pedir
el email hasta que este sea correcto.
#código en el editor
def validacion_email(email):
validacion=False
val=False
Pág. 87
Programando con Python: Problemario López Marín, Miguel
valp=False
p=0
ca=0
for x in email:
p+=1
if x =="@" and p>4:
ca+=1
val=True
if x=="." and p>10:
valp=True
return validacion
def pedir_email():
email=input("Introduzca E-mail: ")
return email
#Inicio Principal
email=pedir_email() # Invocacion de funcion que pide el email
Pág. 88
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0026.
Desarrolle una calculadora básica, tomando en cuenta que esta
permita realizar cálculos hasta que el usuario desee salir, validar la
operación aritmética a ejecutar.
#código en el editor
def calculadora():
true=1
while true:
op=0
print("*****0*******")
print("*CALCULADORA*")
print("****0FF******")
print("\n")
v1= float (input())
if v1==0:
break
while op==0:
oper= input(("+ - * / %:"))
if oper=="+" or oper=="-" or oper=="*" or oper=="/" or
oper=="%":
op=1
elif oper=="*":
res=v1*2
elif oper=="/":
res=v1/v2
elif oper=="%":
res=v1*(v2/100)
print("\n",round(res,3))
#llamada a la Funcion
calculadora()
print("\nGracias por Usar la calculadora")
Una vez entra al ciclo while lo primero que hace nuestra calculadora
es pedir un número, luego el operador aritmético para ello se despliega un
mensaje con las opciones disponibles, esta lectura cuenta con una
pequeña validación que solicita el operador mientras no sea correcto, luego
Pág. 91
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0027.
Desarrollar un programa que pida una clave hasta que se ingrese la
clave correcta, debe mostrar mensaje cuando se equivoque y el de clave
correcta.
#código en el editor
while True:
clave = input("Dime tu clave de acceso: ")
if clave != "1234":
print("Clave incorrecta")
else:
print ("Bienvenido!")
break
Este programa es una pequeña rutina típica de solicitar clave hasta
que se ingrese la correcta, iniciamos con una instrucción while True, entra
al ciclo la primera vez, solicitamos la clave vía teclado, luego mediante una
condición evaluamos si la clave ingresada es igual a la que hemos asignado
en la cadena, de ser correcta muestra un mensaje de bienvenida, y rompe
el ciclo con la instrucción break, en caso de que la clave sea incorrecta se
vuelve a ejecutar el ciclo, repitiendo todo el proceso.
Ejercicio 0028.
Elaborar un programa que pida una clave y luego de 5 intentos el
programa debe finalizar e indicarle al usuario que agoto los intentos,
ademas debe mostrar los intentos fallidos, así como indicar cada vez que
se equivoca ingresando la clave y un mensaje de Acceso autorizado cuando
sea ingresada la clave correcta.
#código en el editor
Pág. 92
Programando con Python: Problemario López Marín, Miguel
intento=0
while True and intento<5:
intento=intento+1
clave=(input("DIGITE LA CLAVE:"))
if clave=="4321":
print("Acceso AUTORIZADO")
break
else:
print("Acceso DENEGADO")
print("Numero de Intentos:",end="")
print(intento)
if intento==5:
print("LO SIENTO, INTENTOS AGOTADOS")
Ejercicio 0029.
Desarrollar un programa que sume los Números ingresados por
teclado, el programa debe salir cuando se pulse el cero
#código en el editor
suma=0
n=1
while n !=0:
n= int (input("Indica un Numero:"))
suma=suma+n
print("LA suma de N numeros es:", end="")
print(suma)
Ejercicio 0030.
Programar una solución que permita calcular la nota definitiva de
un alumno, esta se determina mediante el promedio de sus notas, asuma
que son 5 notas.
#código en el editor
acum=defin=0
for i in range(1,6):
nota= int (input("Indique la Nota:"))
acum=nota+acum
defin= acum/5
print ("Tu nota definitiva es:", end="")
print(defin)
Ejercicio 0031.
Codificar un programa que muestre su nombre tantas veces Ud. Lo
indique
Pág. 95
Programando con Python: Problemario López Marín, Miguel
#código en el editor
print("Hola, dime tu Nombre:",end="")
nombre=input()
i= int (input("Cuantas veces quieres ver tu nombre?"))
for i in range(1,i):
print(nombre)
Ejercicio 0032.
Elabore un programa que permita ver la tabla de multiplicar de un
numero
#código en el editor
tabla= int (input("Cual Tabla quieres generar:"))
for i in range(1,11):
print(tabla*i)
Ejercicio 0033.
Codifique la solución para ver la tabla de multiplicar del 1 al 10
#código en el editor
print("TABLA DE MULTIPLICAR")
print("______________________")
for i in range(1,11):
for j in range (1,11):
print(i*j)
print("-----------------")
Ejercicio 0034.
Desarrolle un programa que permita calcular la nota final de un
número indeterminado de alumnos, la nota definitiva se obtiene del
promedio de 5 notas, además por cada alumno debe mostrar el nombre,
la definitiva y el literal que obtuvo tomando en cuenta los siguientes
criterios:
Mayor a 4.30 Literal A
Entre 4.00 y 4.30 Literal B
Menor a 4.00 Literal C
Observación: tome en cuenta que máximo puede emplear bucles y
condiciones para la solución, no emplea listas o arreglos.
#código en el editor
res=1
while res==1:
Pág. 97
Programando con Python: Problemario López Marín, Miguel
print("Dime tu Nombre:")
nombre=input()
acum=0
for i in range(1,6):
nota= float (input("Ingrese Nota:"))
acum=nota+acum
nota=acum/5
if nota>4.30:
letra="A"
elif nota >4.00 and nota<=4.30:
letra="B"
else:
letra="C"
print("ALUMNO:",nombre)
print("NOTA FINAL:",round(nota,2),"Literal ",letra)
Una vez dentro del ciclo while se pide el nombre del alumno y se
inicializa en cero la variable acum, en esta variable se almacenará la suma
de las notas de cada alumno cada vez que se ejecute el proceso. Es
Pág. 98
Programando con Python: Problemario López Marín, Miguel
relevante destacar que el acumulador se inicia en cero fuera del ciclo para
pero dentro del repita mientras, de tal manera que cada vez que el proceso
se repita la variable acum, estará en cero para el próximo alumno a
procesar.
Luego inicia el ciclo repita para, en este bucle se pedirán las 5 notas
y se acumulara su valor en la variable acum, luego fuera del ciclo para,
pero aun en el ciclo mientras efectuamos el cálculo de la nota final
tomando lo acumulado en el bucle para y dividiéndolo entre el total de
notas ingresadas, seguidamente con este cálculo empezamos una
condición anidada empleando como variable de control la nota obtenida
para determinar a qué literal pertenece según el problema planteado.
Ejercicio 0035.
Codifique un programa que permita calcular el número mayor y
menor de una lista, considere pulsar cero para salir del programa.
#código en el editor
print("Calcular Mayor y menor de una lista <0> Para salir\n")
num=1
may=0
men=10000
c=0
while num!=0:
c=c+1
print("Ingrese el Numero:",c,"\n")
Pág. 99
Programando con Python: Problemario López Marín, Miguel
num=int (input())
if num>may:
may=num
Ejercicio 0036.
Desarrolle un programa que permita calcular el mayor de 3
números, tantas veces como lo desee el usuario, se sugiere emplear el
cero (0) para salir del programa.
#código en el editor
print("Calcular el Mayor de 3. [0] Cero para salir")
while True:
a= int (input("1er NUMERO"))
if a==0:
break
b= int (input("2do NUMERO"))
c= int (input("3er NUMERO"))
may=a
if b>may:
may=b
if c>may:
may=c
Ejercicio 0037.
Codifique un programa que permita divorciar una mujer y muestre
sus nombres y su apellido de soltera luego del divorcio
#código en el editor
if pos>10:
res="Casada"
Pág. 102
Programando con Python: Problemario López Marín, Miguel
else:
res=",SOLTERA"
return res,pos
#INICIO PRINCIPAL
#----------------
mujer=input("Nombre de la Mujer:")
valor,pos=status_mujer(mujer)
Función status_mujer:
Esta empieza inicializando la variable pos en cero, esta variable
marcara la posición cuando se esté recorriendo la cadena, luego a la
variable nombre la cual recibió por parámetro el nombre de la mujer le
aplicamos la función upper convirtiendo la cadena a mayúscula.
Pág. 104
Programando con Python: Problemario López Marín, Miguel
Función separar:
La función recibe dos argumentos el nombre de la mujer y la
posición donde encontró el asociativo (de) ya validado, seguidamente el
nombre se convierte a mayúscula y en la siguiente instrucción se guarda
en la variable ca solo el nombre de la mujer y apellido de soltera, para ello
asignamos la cadena del nombre hasta la posición de pos-1 y con ello
descarta el asociativo (de) junto con el apellido de casada, finalmente
retorna ca con el nombre y apellido de soltera, desde donde fue invocada
la función separar.
Pág. 105
Programando con Python: Problemario López Marín, Miguel
CAPITULO III.
Importando librerías en Python
import, fractions, os
Estructura de Datos
Diccionarios, Tuplas, Listas
Métodos de ordenación
Funciones:
append
remove
index
+ Resolución de ejercicios
Pág. 106
Programando con Python: Problemario López Marín, Miguel
Estructura de Datos
Python cuenta con una amplia estructura de datos, entre ellas
tenemos listas conocidas en otros lenguajes como arreglos, tuplas y
diccionarios conocidos también como arreglos asociativos en otros
lenguajes como por ejemplo en PHP, empecemos con las tuplas.
Pág. 108
Programando con Python: Problemario López Marín, Miguel
Diccionarios
Es una estructura de datos que permite que permite almacenar
información del tipo clave valor, no maneja índices, tampoco importa el
orden que son almacenados, en otros lenguajes son conocidos como
arreglos asociativos, un diccionario se define entre {} y cada clave tiene
su valor y esta se separa con: (dos puntos), ilustremos en el prompt:
Tuplas
Es una estructura de datos que permite almacenar múltiples valores
y de tipos de diferentes, son inmutables (no se pueden modificar), pero si
hacer consultas de sus elementos empleando índices, empaquetar y
desempaquetar valores. Su sintaxis seria la siguiente tupla("cadena1",
"cadena2",numero,"asi_sucesivamente"), Veamos un ejemplo de tupla
desde el prompt
Ejercicio 0038
Se requiere un programa que calcule la edad de una persona, se
pide que muestre la edad, año de nacimiento y el nombre de esta.
Requiere: uso de funciones, tuplas y documentación
#código en el editor
# Funcion para pedir el año actual
def actual():
actual=input("Indique el Año actual")
return actual
#Funcion para ingresar los datos de la persona y retornar
#en form de tupla esos datos al programa principal
def datos():
ac=int(actual())
fn=int(input("Indique su Año de Nacimiento"))
nombre=input("Indique su Nombre")
edad=ac-fn
mis_datos=fn,nombre,edad
return mis_datos
Pág. 110
Programando con Python: Problemario López Marín, Miguel
Listas
Similar a un arreglo unidimensional, permite almacenar múltiples
valores, incluso de tipos distintos, aunque esto no es aconsejable, para su
manipulación se requieren emplear índices al igual que en los arreglos.
Una de sus características es que van cercados con corchetes a
diferencia de las tuplas que van con paréntesis. Veamos una ilustración de
listas en el prompt
Clausula append
El método (append) permite agregar elementos a una lista, su
sintaxis seria la siguiente lista.append(elemento_agregar)
Pág. 112
Programando con Python: Problemario López Marín, Miguel
Clausula remove
El método (remove) permite remover elementos a una lista, su
sintaxis seria la siguiente lista.remove(elemento_a_eliminar)
index
La poderosa función index permite saber la posicion donde se
encuentra un elemento en una lista o tupla, importante resaltar, su uso se
aconseja acompañada de la función in, ya que si en la consulta el elemento
a buscar no existe generara un error.
que hasta el capítulo II, todo se explicó al detalle, ya en esta fase si has
llegado hasta aquí, seguramente tendrás una mayor agilidad para la
comprensión y resolución de problemas. Además, aconsejo que la mayor
explicación de cada problema, en este punto se despeja en la mayoría de
los casos con la práctica, resultando en este punto más didáctico y fácil de
asimilar; destacando, sobre todo, que cuentas con la solución completa
aquí en el texto y los scripts de los ejercicios en digital, que es algo
importantísimo. ¡Ánimos a escribir y ejecutar cada ejercicio
propuesto!
Ejercicio 0039.
Dadas 2 listas con nombres y cedulas, desarrolle un modulo que
permita hacer consultas sobre estas por numero de cedula, mostrar los
datos si existen y caso contrario mostrar mensaje.
Requiere: uso de funciones, clausula index, documentacion
#codigo en el editor
#Inicializacion de 2 listas una con nombres y otra con cedulas
nombres=["miguel","lopez","mariajose","celma","alejandro","alexa
nder",]
cedula=["17686198","8412963","25240708","10165571","2009184
0","10165571"]
#Funcion que permite hacer consultas de cedulas registradas
def consultar():
while True:
dato=(input("Dato a Consultar:"))
if dato in cedula:
pos=cedula.index(dato)
print("POSICION:",pos)
print("Nombre:",nombres[pos])
print("Cedula:", cedula[pos])
else:
Pág. 114
Programando con Python: Problemario López Marín, Miguel
print("Dato no encontrado:")
if dato=="0":
break
Metodos de Ordenación
Existen una gran variedad de metodos de ordenacion, sin embargo
aunque algunos lenguajes como Python cuentan con funciones que
ordenan listas de datos, pero estas ordenan la lista pero no ordenan
atendiendo requerimientos especificos por ejemplo varios vectores en
paralelos, se requieren construir funciones o metodos para ellos, aquí
emplearemos 2 metodos, el el metodo de ordenacion por insercion y
archifamoso ordenacion por burbuja, a continuacion con un ejercicio
desarrollaremos un programa donde se ponga en uso el ordenamiento
atendiendo el metodo de la burbuja.
Ejercicio 0040.
Desarrollar las funciones necesarias para cargar una lista de n
alumno con nombres y notas finales, ademas que genere un listador
ordenado por nombres y calcular la mayor y menor nota
Requiere: uso de funciones, metodo de ordenación por
burbuja, documentación
#Ejercicio: Cargar una Lista de N Alumnos, Notas Finales,
#Calcular la Mayor y Menor Nota junto con el Nombre del alumno
#Contiene Funciones con pase de parametros, arreglos, metodo de
ordenacion por burbuja,llamado y ejecucion de funciones
nombres=[]
notas=[]
Pág. 115
Programando con Python: Problemario López Marín, Miguel
#funcion decorativa
def linea():
for i in range(0,25):
print("_",end="")
print()
p=inicio()
ordenar(p,(nombres),(notas))
imprimir(p,(nombres),(notas))
posi=mayornota(p,(nombres),(notas))
Pág. 117
Programando con Python: Problemario López Marín, Miguel
posim=menornota(p,(nombres),(notas))
linea()
print("MAYOR NOTA\n","Alumno:",nombres[posi],"Nota
Final:",notas[posi])
linea()
print("\nMENOR NOTA\n","Alumno:",nombres[posim],"Nota
Final:",notas[posim])
linea()
Ejercicio 0041.
Desarrolle un programa que permita cargar 7 numeros por teclado,
mostrar la lista original, y ordenar y mostrar empleando metodo de la
burbuja y metodo de ordenación por insercion
Requiere: Ordenamiento por metodo de burbuja e
insercion, documentación.
#Codigo en el editor
datos=[]
for i in range(0,7):
valor=int (input("Ingrese un Numero"))
Pág. 118
Programando con Python: Problemario López Marín, Miguel
datos.append(valor)
#se duplica el vector original uno para el metodo por burbuja
# y el otro para el metodo de ordenacion por insercion
burbuja=insercion=datos
#Listado original
for i in range (0,7):
print(datos[i])
#-------------------------------------------
Ejercicio 0042.
Dado 2 listas una contiene el nombre de frutas y la otra sus codigos,
desarrollar un modulo que permita ordenar las listas según el criterio que
desee el usuario para ello, debe darle las siguientes opciones: Ordenar por
codigo o por nombre, Y debe considerar ademas si ese orden lo quiere
descendentemente o ascendentemente
Requiere: funciones, ordenacion por insercion, documentacion
#codigo en el editor
frutas=["pera","mango","durazno","kiwi","manzana","melocoton","lechoz
a","mora","piña","cambur","parchita","almendra","avellana","ciruela","fre
sa","patilla"]
codigo=[4,15,20,2,13,9,25,100,1,95,45,30,16,8,20,75]
def orden(orden,tipo):
for x in range(o,len(frutas)):
xfruta=frutas[x]
xcodigo=codigo[x]
y=x
#ascendente y codigo
if orden==1 and tipo==1:
while y>0 and codigo[y-1]>xcodigo:
codigo[y]=codigo[y-1]
frutas[y]=frutas[y-1]
y=y-1
#descendente y codigo
Pág. 120
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0043
Realizar un programa que lea cuatro nombres y los muestre por
pantalla, agregandole una funcion decoradora que incluya una linea por
encima y por debajo del nombre proporcional al tamaño del nombre,
ademas debe indicar cuantos caracteres tiene el nombre de cada persona
#codigo en el editor
nombres=[]
#FUNCION ESTETICA Y DE SALIDA
def resaltar(nombre):
#le suma 2 posiciones para efectos de linea decoradora
p=int (len(nombre))
p+=2
#-------------------------------------------------------
for i in range (0,(p)):
print("_",end="")
print("\n",nombre)
for i in range (0,(p)):
print("_",end="")
print()
return len(nombre)
for i in range(0,4):
print(resaltar(nombres[i]),"letras tiene tu nombre\n")
Ejercicio 0044
Programar una solucion que permita cargar 4 nombres, ademas
pedirle a cada uno año de nacimiento, año actual. Considere el uso de
Pág. 122
Programando con Python: Problemario López Marín, Miguel
leernombres()
Ejercicio 0045
Desarrolle un programa con listas precargadas ( a su gusto o los
aquí propuestos), que contengan productos y precios, debe efectuarse un
proceso de ventas por cliente, asumiendo que cada cliente puede llevar los
productos que Ud. Dispone, para ello muestre los productos en pantalla y
con una opcion de agregar, que vaya incluyendo en la compra el codigo
del producto que desea agregar, para finalizar la compra debe pulsar la
tecla cero, luego que el cliente no desee agregar mas productos, se deb
totalizar el monto de la compra y el respectivo detalle de lo que compro,
ademas el proceso debe permitir atender mas clientes si asi lo desea el
usuario
Requiere: documentacion, validacion y manejo de errores
#codigo en el editor
#importacion de libreria para usar pantalla
import os
#inicializacion de listas con productos y precios
productos=["","Azucar","Mayonesa","Crema Dental 50cc","jabon de
baño","Queso","Aceite"]
precios=[0,3000,6500,3200,2000,9000,5500]
ventas=[]
venta=0
res=-1
Pág. 124
Programando con Python: Problemario López Marín, Miguel
total=0
#ciclo que controla agregar mas productos en la venta por cliente
while True:
Ejercicio 0046.
Desarrolle un programa de venta de productos tipo bodega
considere, los detalles requeridos para el ejercicio 45, pero tome en cuenta
aque aquí solo se permitira una venta de maximo 3 productos por cliente,
y en la pantalla debera mostrar los productos junto con los precios al
cliente para que este elija. Emplee funciones decoradoras para generar
interfaz amigable y de presentacion tanto de salida como de ingreso.
Igualmente debe totalizar y mostrar el detalle de la compra por cada
cliente, considere emplear una funcion para la compra
Requiere: funciones decoradores, validaciones,
documentacion, manejo de errores
#codigo en el editor
# declaracion de listas con productos y precios
productos=[" ","Aceite","Azucar","Arroz","Atun","Leche
liquida","Mantequilla","1/2 Carton de Huevos"]
precios=[0,6500,3500,3000,5000,2000,6500,4000,]
a=b=c=-1
#funcion decoradora
def linea2():
print()
for i in range (0,65):
print("*",end="")
print()
#funcion decoradora
def linea():
for i in range (1,30):
print("_",end="")
Pág. 126
Programando con Python: Problemario López Marín, Miguel
print()
detalle=productos[ar1]+esp+productos[ar2]+esp+productos[ar3]
costo=precios[ar1]+precios[ar2]+precios[ar3]
return costo, detalle
a=int(input(""))
b=int (input(""))
c=int(input(""))
except:
print("verifique el producto, solicitado")
if a or b or c !=0:
linea2()
try:
print (compra(a,b,c), "Pesos, monto DE TU COMPRA y
Detalle, gracias por Preferirnos")
except:
print("Ud. introdujo informacion incorrecta")
linea2()
Ejercicio 0047
Desarrollar una aplicación empleando listas y funciones, que emule
un sistema de votacion para ello tome en cuenta los siguientes
requerimientos:
- Debe tener un Menu de opciones
- Deb contar con un modulo para (abrir el registro de candidatos
y electores, abrir y cerrar votaciones)
- Validar electores no se registren duplicados al igual que los
candidatos (para registrar candidatos o electores el sistema debe
estar abierto para registro)
Pág. 128
Programando con Python: Problemario López Marín, Miguel
#codigo en el editor
#Sistema de Votacion, empleando listas
if cl==cc:
pin=cc
print("Clave Actualizada")
else:print("Confirmacion errada/ Clave No Cambiada")
else:
print("Clave errada....")
if res=="n":
print("**Clave NO ACTUALIZADA")
os.system("pause")
return pin
o=int(o)
o=o-1
votacion[o]=votacion[o]+1
votantes.append(dato)
print("VOTO REGISTRADO")
print("Candidato Agregado")
o= int(o)
if o==1:
apertura=True
if o==2:
apertura=False
if o==3:
if validar()==True:
avotacion=True
if o==4:
avotacion=False
if o==5:
pin=clave(pin)
break
if o==0:break
return apertura, avotacion,pin
ub,ganador=totalizar()
print("Resultados")
linea()
print(candidatos)
print(votacion)
linea()
print ("GANADOR DE ELECCIONES:**","(",candidatos[ub],")")
print("Total Votos:","(",ganador,")")
fin=True
return fin
for k in range(0,len(cedula)):
cedula.append(dato)
votantes.append(dato)
linea()
print("Puede Proceder a Una NUEVA ELECCION****")
apertura=""
avotacion=""
fin=False
return fin,apertura,avotacion
except:
print("No hay una votacion previa, ni elecciones cerradas")
Pág. 135
Programando con Python: Problemario López Marín, Miguel
while True:
print("SISTEMA DE VOTACION")
linea()
op=(input("\n1.Registro \n2.Candidatos \n3.Votacion
\n4.Ajustes y Cierres \n5.Resultados \n6.NuevaEleccion.\n7.Salir\n"))
op=int(op)
if op==1:cargar()
elif op==2:candidato()
elif op==3:
if validar()==True:
votar()
else:
print("No supero la Validacion....")
elif op==4:
apertura,avotacion,pin=ajustes(apertura,avotacion,pin)
elif op==5:
if validar()==True:
fin=resultados(fin)
else:
print("Verifique Votaciones CERRADAS, y Clave de Acceso")
elif op==6:
if validar()==True:
try:
fin,apertura,avotacion=nueva(fin)
except:
print("Por favor, haga primero, una eleccion")
Ejercicio 0048
Desarrolle una aplicación que permita simular un sistema de
apertura y manejo de cuentas bancarias considere los siguientes
aspectos:
- Menú con opciones
- Debe permitir registrar nuevas cuentas con nombres, cedulas y
si desea el número de cuenta y el monto de apertura
- Mover dichas cuentas, retirar y depositar dinero
- Validar disponibilidad a la hora de retirar
- Permitir consultar clientes y modificar datos excepto el saldo
- Permitir eliminar cuentas (debe verificar si existe saldo, emitir
cheque de gerencia con el saldo)
- Consulta de listado de saldos y totales depósitos y retiros por
cuenta
- Debe crearse una clave, también debe permitir actualizar la
clave, la cual deberá pedirse para modificar datos, eliminar
cuentas y transacciones superiores a 300 mil pesos, esto
incluye (nuevas cuentas, retiros y depósitos)
Requiere: menu con opciones, funciones, documentacion,
validaciones, funciones decorativas, uso de listas, actualizaciones
sobre listas, logica de programacion, haberse leido todo el texto
y haber practicado
#Código en el editor
#Funcion de estetica
#Imprime en Pantalla 20 asteristicos en una misma linea
def linea():
print
for i in range(0,20):
print("*",end="")
print("\n")
nombres.append(dato)
ced.append(dato1)
ahorro.append(dato2)
depositos.append(ini)
retiro.append(ini)
print("Cuenta creada....")
if val==True and p!=-1:
print("CEDULA YA EXISTE.. VERIFIQUE****..")
res=(input("Desea incluir otro registro: s/n"))
res=(res.lower())
if res =='n':
break
if pos==-1:
print("REGISTRO NO EXISTE:")
print()
res=(input("Agregar Otra Transaccion s/n:"))
res=(res.lower())
if res=="n":
break
cc=(input("\nConfirmar clave:"))
if cl==cc:
pase=cc
print("Clave Actualizada")
else:print("Confirmacion errada/ Clave No Cambiada")
else:
print("Clave errada....")
if res=="n":
print("**Clave NO ACTUALIZADA")
os.system("pause")
return acceso,pase
if op =="1" or op=="2":
val=validar()
if val==False:
print("\nCLAVE INVALIDA...**")
if op=="1" and val==True:
print("\nDEBE EMITIRSE CHEQUE DE GERENCIA
POR:",ahorro[x])
linea()
nombres.remove(nombres[x])
ced.remove(ced[x])
retiro.remove(retiro[x])
depositos.remove(depositos[x])
ahorro.remove(ahorro[x])
print("\n\nCUENTA ELIMINADA**")
#Programa principal(Inicio)
#Invocacion de Menu de Opciones
while True:
os.system("cls")
print("Gestion de Cuentas Bancarias\n")
Pág. 144
Programando con Python: Problemario López Marín, Miguel
linea()
if acceso==False:
print("\n<Generar clave>(OBLIGATORIO)/Ajustes")
op=int (input("\n1.Registrar \n2.Transacciones \n3.VerClientes
\n4.Ajustes \n5.Actualizar\n6.Salir\n\n"))
if op==1:
cargar()
elif op==2:
transaccion()
elif op==3:
clientedetalle()
elif op==4:
acceso,cla=ajustes(cla,acceso)
elif op==5:buscar()
elif op==6:break
#Fin menu e inicio Principal
Pág. 145
Programando con Python: Problemario López Marín, Miguel
CAPITULO IV
Interfaces graficas
Librería tkinter
Mi primera ventana
Cajas de texto
Etiquetas
Botones
Método get
Método set
Variables
Ventanas emergentes
Pág. 146
Programando con Python: Problemario López Marín, Miguel
Librería tkinter
Python cuenta con una poderosa biblioteca gráfica, la cual permite
el desarrollo de aplicaciones GUI ( Grafic User Interface), que de la mano
de su propio gestor de base de datos incorporado (sqlite) se convierten en
unos instrumentos muy valiosos para diseñar y desarrollar programas en
ambientes gráficos, a manera introductoria desarrollaremos algunos pocos
ejercicios empleando esta biblioteca, igualmente se introducirán nuevos
temas y conceptos propios asociados a interfaces graficas
Pág. 147
Programando con Python: Problemario López Marín, Miguel
Mi primera ventana
Si hay algo que caracteriza este lenguaje es que con pocas líneas
hacemos grandes avances, aquí como buenos programadores todo lo
construiremos desde cero, aunque hay entornos de asistencia para generar
el diseño y luego acoplarlo con el código en el lenguaje que estemos
empleando. Veamos cómo se genera una ventana, con ejemplo desde el
prompt:
>>> from tkinter import*
>>> principal=Tk()
Con estas dos líneas se genera una ventana, así de sencillo al menos
una simple ventana, quedaría así
Instrucción Significado
from tkinter import* Permite importar de la librería tkinter
todos sus componentes
principal=Tk() Se hace la declaración de la clase que
permitirá usar la ventana principal, esta
dependerá de la biblioteca Tk de tkinter,
Pág. 149
Programando con Python: Problemario López Marín, Miguel
Etiqueta o Label
Es un elemento que permite mostrar texto, en interfaces gráficas,
veamos el código necesario para mostrar una etiqueta desde el prompt.
Importante destacar: a diferencia de la programación
procedimental o en ambiente de consola, aquí no podemos
mostrar una etiqueta sin los elementos mínimos que se requieren
para desplegarla, esto involucra un marco o ventana, y así
sucesivamente para otros objetos
>>> from tkinter import*
>>> principal=Tk()
>>> principal.title("Hola Mundo")
''
>>> principal.geometry("200x300")
''
>>> principal.config(bg="pink")
#Aqui inicia el codigo que permite desplegar la etiqueta o label
>>> etiqueta=Label(principal, text="Mi primera etiqueta",
bg="pink", fg="blue")
>>> etiqueta.pack()
Pág. 150
Programando con Python: Problemario López Marín, Miguel
Ejercicio 0049.
Realizar una interfaz gráfica que contenga título, fondo de color
azul, unas dimensiones de 100x150 pixeles, una etiqueta que diga
“Apellidos y Nombres” y una caja de texto:
Veamos la solución desde el modo de edición ejecutándolo desde el
propio editor de Python, el código necesario y resultado sería el siguiente:
#código en el editor
from tkinter import*
principal=Tk()
principal.title("GUI en Python")
principal.geometry("250x220")
Pág. 151
Programando con Python: Problemario López Marín, Miguel
principal.config(bg="blue")
"""Aqui inicia el codigo que permite desplegar la etiqueta
o label, a la etiqueta se le aplica la propiedad bg para poner
el mismo color del fondo de lo contrario las etiquetas salen en
color de fondo gris, igual que el fondo original de la ventana"""
etiqueta=Label(principal, text="Apellidos y Nombres", bg="blue",
fg="white")
etiqueta.pack()
#Aqui inicia el codigo que permite desplegar la caja de texto
entrada=Entry(principal)
entrada.pack()
Botones
Son objetos gráficos cliqueables que permiten ejecutar alguna
acción mediante la invocación de alguna función mediante la propiedad
command.
Ejercicio 0050.
Realizar una aplicación grafica que contenga todo lo del ejercicio
49, adicional a ello agregar a ello una etiqueta que indique “Año de
nacimiento”, además de una caja de texto, luego otra etiqueta que diga
“Edad” junto a otra caja de texto, ¡como título a la ventana
“Bienvenidos!!!”, por ultimo agregar un Botón que diga “Calcular”
#codigo en el editor
from tkinter import*
principal=Tk()
principal.title("Bienvenidos!!!")
principal.geometry("250x220")
principal.config(bg="blue")
#ETIQUETAS Y CAJAS DE TEXTO---------------------------
etiqueta_nombre=Label(principal, text="Apellidos y Nombres",
bg="blue", fg="white")
etiqueta_nombre.pack()
caja_nombre=Entry(principal)
caja_nombre.pack()
caja_fecha=Entry(principal)
caja_fecha.pack()
Pág. 153
Programando con Python: Problemario López Marín, Miguel
caja_edad=Entry(principal)
caja_edad.pack()
#-----------DECLARACION DE UN BOTON-------------------
boton_calcular=Button(principal,text="Calcular")
boton_calcular.pack()
principal.mainloop()
Método get
Permite obtener el contenido de una caja de texto
Método set
Permite asignar un valor a una variable
Variables
Existen 3 tipos de variables en interfaces graficas con tkinter:
Ventanas emergentes
Son pantallas graficas que permitan advertirnos de algún tipo de
contenido o de alguna acción a ejecutar o ejecutada por el usuario,
también algunas permiten confirmar, reintentar o rechazar alguna acción
próxima a ejecutarse.
Existen varios tipos de ventana, aquí les mostraremos una de
tantas, la de aceptar un mensaje después de ejecutar una acción.
Ejercicio 0051.
Se pide realizar una aplicación grafica que contenga las exigencias
del ejercicio 0050 y adicional a ello: programe la funcionalidad del botón
calcular, que al hacer clic en el botón calcule la edad de la persona, y la
ubique en la última caja de texto, además que ubique el Nombre “Pedro
Pérez” en la primera caja de texto, debe asociar el contenido del año de
nacimiento como una variable de tipo entero, la caja donde va nombre
asócielo con una variable StringVar, igualmente desplegar una pantalla
emergente que avise que le edad ha sido calculada.
Pág. 155
Programando con Python: Problemario López Marín, Miguel
#código en el editor
from tkinter import*
from tkinter import messagebox
principal=Tk()
principal.title("Bienvenidos!!!")
principal.geometry("250x220")
principal.config(bg="blue")
#declaracion de variable entera
fn=IntVar()
#limpiamos el contenido de la variable entera, sino lo hacemos
mostrara un cero
#apenas se ejecute nuestra interfaz grafica
fn.set("")
nom=StringVar()
#----------------FUNCION CALCULAR EDAD---------------
def cal_edad():
# con la propiedad delete limpiamos todo el contenido de la caja
de texto
caja_edad.delete(0,END)
edad=2020-fn.get()
#con la propiedad insert insertamos en la primea posicion el
contenido
#que se indica, en este caso la edad calculada
caja_edad.insert(0,edad)
#mediante el metodo set cambiamos el nombre de la variable
nom.set("Pedro Perez")
#-----Muestra la ventana emergente con el aviso requerido
messagebox.showinfo("Atencion", "La edad ha sido calculada")
caja_edad=Entry(principal)
caja_edad.pack()
#-----------DECLARACION DE UN BOTON-------------------
#asociacion del boton calcular con el evento de calcular la edad
#mediante la propiedad command, atribuible a los botones
boton_calcular=Button(principal,text="Calcular",command=lambd
a:cal_edad())
boton_calcular.pack()
principal.mainloop()
Bibliografías consultadas