Ejercicios Integradores Resueltos (Listas, Matrices, Diccionarios, Funciones)
Sitio: | Facultad de Ingeniería U.Na.M. |
Curso: | Informática ET241/EM241/IC241/IN241/IM204 |
Libro: | Ejercicios Integradores Resueltos (Listas, Matrices, Diccionarios, Funciones) |
Imprimido por: | Invitado |
Día: | miércoles, 18 de diciembre de 2024, 03:56 |
Descripción
Este libro pretende poner a disposición del Alumno Ejercicios integradores resueltos. Los temas incluidos son:
- Listas
- Matrices
- Diccionarios
- Funciones
Sr. Docente. Si Propone un ejercicio y lo resuelve por favor cree un capítulo y escriba la consigna y solución propuesta.
Tabla de contenidos
- 1. Ordenar una lista. Burbuja
- 2. Lista tipo LIFO
- 3. Ordenar una lista. Vecinos
- 4. Ordenar Listas. Métodos
- 5. Lista tipo FIFO
- 6. Carga de Matriz
- 7. Diccionario de Pacientes
- 8. Mayor de Matriz
- 9. Temperaturas Días Semana.
- 10. Listas pares e impares
- 11. Diccionario con peso
- 12. Manejo de Matrices
- 13. Más sobre matrices
- 14. Diccionarios. Facturas
- 15. Area de Rectangulo
- 16. Area de Círuculo
- 17. Punto Intermedio
- 18. Valor dentro de un intevalo
- 19. Separar Listas Pares e impares
- 20. Valores entre dos enteros.
- 21. Factorial
- 22. Números Aleatorios
- 23. Banderas de países
- 24. Ejercicio Empresa
- 25. Cantidad elementos seguidos
- 26. Ejercicio Socios
1. Ordenar una lista. Burbuja
Cargar por teclado una lista de números reales, luego ordenar de menor a mayor comparando UNO contra TODOS utilizando una función (esto se conoce como método de la burbuja).
Googlear en internet buscar información sobre el método.
Ver que se usa la variable inicio, que va cambiando o avanzando en cada pasada, y otra variable llamada i que es la que recorre lo que resta del arreglo hacia la "derecha", para comparar contra todos los restantes elementos.
2. Lista tipo LIFO
Cree una lista tipo PILA , el primero que entra es el ultimo elemento.. es decir, cada uno que se va agregando se va APILANDO al anterior.
Esto se conoce como : LIFO (LIFO, Last In, First Out) . Se suele usar para organizar un depósito, cuando una empresa cuenta con varios lotes del mismo producto, y teniendo en cuenta que los precios, generalmente aumentan con el paso del tiempo, lo que se hace es vender primero los productos más caros (los últimos que ingresaron) , sería un ejemplo. Veamos como implementar LIFO con Python.
El programa debe proveer un menú que permita agregar, listar y eliminar elementos de la Lista LIFO.
lifo=[]
while True:
print ('''Menú \n
i-Ingresar un elemento a LIFO
s-Sacar un elemento a LIFO
m-mostrar LIFO
f-fin del programa...''')
opc=str(input("Ingrese su opción: "))
print(opc)
if opc=="i":
lifo.append(int(input("Inrgese valor LIFO: ")))
elif opc=="s":
lifo.pop()
elif opc=="m":
print(lifo)
elif opc=="f":
break
3. Ordenar una lista. Vecinos
Cargar por teclado una lista de números reales, luego ordenar de menor a mayor comparando VECINOS.
4. Ordenar Listas. Métodos
Este método ordena la lista en su lugar, utilizando solo "comparando entre elementos".
No se suprimen las excepciones: si falla alguna operación de comparación, fallará toda la operación de clasificación (y la lista probablemente quedará en un estado parcialmente modificado).
sort () acepta dos argumentos: key y reverse.
El valor posible para reverse es True.
Para key hay varias alternativas, veremos algunas mas adelante.
Veremos como usar métodos para ordenar listas. El método sort está documentado en:
https://docs.python.org/3.7/library/stdtypes.html?highlight=sort#list.sort
En la documentación sobre el uso para ordenar está en : https://docs.python.org/3/howto/sorting.html , podemos ver que existen dos métodos que permiten ordenar listas. Ellos son.
- sort ( cambia el orden de la lista original)
- sorted (regresa otra lista, sin modificar la original)
El método sort es para ordenar una lista en forma ascendente ( 1,2,3..etc ó a,b,c ó A,B,C).
Se puede cambiar el criterio indicando el argumento reverse=True, para el método
La línea 13, se puede ver el argumento reverse=True, que cambia el tipo de orden del método.
Notar que este método MODIFICA la LISTA, esto en algunos casos puede que no sea deseado, para esos casos Python tiene el método sorted.
Vemos que en este caso sorted crea una nueva lista ordenada, en este caso solo se imprime por pantalla la lista ordenada, también se podría guardar en otra lista, por ejemplo.
Veamos un ejemplo donde la lista contiene elementos que nos son homogéneos ( del mismo tipo de datos), para poder ordenar se deber "migrar" los datos al tipo string , pasando el argumento key=str al método sort.
5. Lista tipo FIFO
Hay un método de almacenamiento en depósitos llamado FIFO, (First in First Out ) el primero que ingresa es el primero que sale , pensemos en un producto que tiene fecha de vencimiento a los 7 días de ingresado al depósito, tenemos que vender lo mas viejo ( o que ingresó primero). Vamos a ver como implementar con Python este tipo de almacenamiento.
Consigna.
Cree una lista tipo FIFO ( Firs In , First Out ) y un menú para trabajar con esa memoria. El programa debe proveer un menú que permita lista, ingresar y sacar elementos de la Lista.
fifo=[]
while True:
print ('''Menú \n
i-Ingresar un elemento a FIFO
s-Sacar un elemento a FIFO
m-mostrar FIFO
f-fin del programa...''')
opc=str(input("Ingrese su opción: "))
print(opc)
if opc=="i":
fifo.append(int(input("Ingrese valor LIFO: ")))
elif opc=="s":
fifo.pop(0)
elif opc=="m":
print(fifo)
elif opc=="f":
break
6. Carga de Matriz
Cargar una una matriz con números reales definiendo las dimensiones.
Luego de cargada la matriz, mostrar los valores de la misma de manera estética ( una fila por línea).
Este ejercicio demuestra que la forma de visualizar una matriz no es lo mismo que una lista, es por eso que requiere de crear una lista para cada fila.
Recordemos que el método append, inserta un elemento al final de una lista.
7. Diccionario de Pacientes
"""
ESCRIBIR UN CODIGO QUE PERMITA:
MOSTRAR UN MENU CON LAS SIGUIENTES OPCIONES:
1-CARGA DE DATOS DE PACIENTES
2-MOSTRAR DATOS DE PACIENTE
F-FINALIZAR EL PROGRAMA
PARA MOSTRAR EL MENU SE UTILIZARA UNA FUNCION LLAMADA mostrar_menu.
SI SE INGRESA 1 SE DEBERA LLAMAR A LA FUNCION carga, QUE CARGARA
UN DICCIONARIO QUE TENGA COMO CLAVES NUMEROS DE DNI, Y COMO VALORES
LISTAS QUE A SU VEZ CONTENGAN LA EDAD DEL PACIENTE Y SU ALTURA.
SI SE INGRESA 2 SE DEBERA INGRESAR POR TECLADO EL DNI DE UN
PACIENTE Y PASARSELO COMO ARGUMENTO A LA FUNCION
mostrar_paciente, BUSCARA EL DNI DENTRO DEL DICCIONARIO Y SI
HAY COINCIDENCIA RETORNARA LOS DATOS DEL PACIENTE PARA QUE
SEAN MOSTRADOS POR PANTALLA. SI NO HAY COINCIDENCIA SE DEBERA
MOSTRAR EL MENSAJE "PACIENTE INEXISTENTE".
SI SE INGRESA F O f SE DEBERA FINALIZAR EL PROGRAMA
"""
def mostrar_menu():
print("Menu...")
print("1-CARGA DE DATOS DE PACIENTES")
print("2-MOSTRAR DATOS DE PACIENTE")
print("F-FINALIZAR EL PROGRAMA")
def carga():
dni=int(input("Ingrese el DNI del paciente: "))
edad=int(input("Ingrese la edad del paciente: "))
altura=float(input("Ingrese la altura del paciente: "))
pacientes[dni]=[edad,altura]
def mostrar_paciente(ndni):
encontrado=False
for i in pacientes:
if ndni==i:
encontrado=True
return(pacientes[i])
if not encontrado:
return([0,0])
pacientes={}
while True:
mostrar_menu()
op=input("Ingrese la opcion elegida...")
if op=='1':
carga()
elif op=='2':
numDNI=int(input("Ingrese el DNI del paciente a buscar: "))
datos=mostrar_paciente(numDNI)
if not datos==[0,0]:
print("El paciente con DNI {} tiene {} años y mide {}m.".format(numDNI,datos[0],datos[1]))
else:
print("No se encontro al paciente...")
elif op.upper()=='F':
print("Finalizando...")
break
else:
print("Opcion incorrecta, reingrese")
8. Mayor de Matriz
#Funcion que valida ingresos, regresa opcion válida solo 1,2,3
def menu():
while True:
print('1-Cargar')
print('2-Buscar Mayor')
print('3-Salir')
opc=input('Ingrese opcion: ')
if not(opc=='1' or opc=='2' or opc=='3'):
print('opcion no válida.. reingrese')
else:
return opc # regresa 1 o 2 o3
#Funcion que carga matriz.
def carga(humedad):
for x in range(N):#este for recorre CADA fila por lo tanto x va tomar valores 0 y N-1
humedad.append(list())#lista que oficia de fila
for y in range(M):
while True:
ingreso=float(input('ingrese nro'))
if ingreso>=0 and ingreso<=10:
break
else:
print('valor no valido.. reingrese')
humedad[x].append(ingreso)# si es valido guardo.
return(True)
#Funcion que busca y regresa el mayor de la diagonal.
def mayor(humedad):
mayor=humedad[0][0]#propongo un elemento de la matriz como mayor
#El algoritmo que sigue busca si hay algún elemento mayor ...
for x in range(N):#este for recorre CADA fila por lo tanto x va tomar valores 0 y N-1
for y in range(M):
if humedad[x][y]>mayor:
mayor=humedad[x][y]#cuando encuentro uno mas grande que mayor lo tomo como mayor.
return(mayor)
N=2 #Defino dimensiones
M=3 #Defino dimensiones
humedad=[]#declaro una lista de nombre humedad.
cargada=False
while True:
opc=menu()
if opc=='1':
cargada=carga(humedad)# si regresa True es por que se cargó.
print(humedad)
elif opc=='2' :
if cargada:
print(mayor(humedad))
elif opc=='3':
print('saliendo')
break
9. Temperaturas Días Semana.
'''Consigna:
Dado un diccionario que tiene los días laborares de la semana en el que se cargan para cada día valores de 5 temperaturas del día que pueden estar en [-10,10] ó [20;50] crear una función que muestre el menu siguiente: 1)Cargar un día...(paso como argumento las claves del diccionario..) 2)Mostrar día...(paso número de día 1 para Lunes,2 para Martes..) 3)Mostrar todo el diccionario ( un día por línea) 4)Mostrar el día que tuvo mayor promedio 5)Salir. Cada punto del 1 al 4 implementar con una función. ''' # Que faltaría para ir mejorando el programa? # Que pasa si se carga dos veces un día? # Que pasa si se ingresan valores que no corresponden? letras en lugar de números. # Puedo parametrizar los valores de temperatura? # Que pasa si no cargue nada y ejecuto puntos 2,3,4? datos={'Lunes':[],'Martes':[],'Miercoles':[],'Jueves':[],'Viernes':[]} #------------------------------------------------------------ def menu(): while True: print('1) Cargar un día de la semana') print('2) Mostra temperaturas de un día') print('3) Mostrar todo los datos') print('4) Mostrar el día con mayor promedio') print('5) Salir-finalizar el programa') opc=input('Ingrese una opción válida: ') if not(opc=='1' or opc=='2'or opc=='3'or opc=='4'or opc=='5'): print('La opción ingresada no es válida.. reingrese..') else: return opc #------------------------------------------------------------ def cargar(dia): for i in range(5): temp=float(input('Ingrese la temperatura: ')) while not((temp>=-10 and temp<=10) or (temp>=20 and temp<=50)): print('Ud. ingresó un valor que no pertence al rango..reingrese..') temp=float(input('Ingrese la temperatura: ')) datos[dia].append(temp) #------------------------------------------------------------ def mostrar_dia(dia): dias_semana=['Lunes','Martes','Miercoles','Jueves','Viernes'] print(datos[dias_semana[dia-1]]) #------------------------------------------------------------ def mostrar_todo(): print('-------------Valores cargados------------------') for z in datos: print(datos[z]) print('------------------------------------------------') #------------------------------------------------------------ def mayor_promedio(): promedio_maximo=0 for i in datos: print('i vale',i) acumulador=0 for x in range(5): acumulador=acumulador+datos[i][x] if promedio_maximo<(acumulador/5): dia=i return dia # Código principal------------------------------------------------- while True: opc=menu() if opc=='1': while True: dia=input('Ingrese un día de la semana: ') dia=dia.capitalize() if dia in datos: cargar(dia) break else: print('El día ingresado no es válido. Reingrese..') print(datos) elif opc=='2': while True: dia=int(input('Ingrese un día de la semana: ')) if dia in range(1,6): mostrar_dia(dia) break else: print('El día ingresado no es válido. Reingrese..') elif opc=='3': print('tres') elif opc=='4': print(mayor_promedio()) elif opc=='5': break
10. Listas pares e impares
CONSIGNA
Realizar un programa que permita:
a) Llamar a una función que muestre un menú como el siguiente y retorne solo opciones 1, 2, 3 o F
1.- Cargar listas
2.- Buscar valor en la lista
F.- Finalizar
c) Si elige 1. debe llamar a una función que debe ir ingresando valores hasta que ingrese el cero. Por cada valor que ingresa lo debe cargar a la lista pares o impares según corresponda. Al final mostrar ambas listas.
d) Si elige 2. llamar a una función que pida que ingrese un número y la función lo busque en la lista que corresponda. Si es par debe buscarlo en la lista pares o si es impar buscarlo en la lista impares. Mostrar si se encuentra o no y si estuviera, en qué posición de la lista.
f) El programa solo termina con F para finalizar.
11. Diccionario con peso
Consigna
Realizar un programa que permita:
a) cargar un número N. Validar que sea positivo sino reingresar. Luego cargar un diccionario con los nombres de N pacientes y su peso. Validar peso entre 0 y 250 kg B
b) Mostrar un menú como el siguiente:
1.- Cantidad de personas que pesan mas que A
2.- Hay personas de menos de X kg?
3.- Promedio de pesos
F.- Finalizar
c) Si elige 1. ingresar un valor A y llamar a una función pasandole ese valor como argumento y retornar la cantidad de personas que superen en peso A pasado como argumento. El valor retornado mostrarlo en el programa.
d) Si elige 2. llamar a una función que pida que ingrese un valor X e informe si hay o no personas con menos de X kg. Si hubiere mostrar el nombre de esas personas en la función.
e) Si elige 3. llamar a una funcion que calcule y retorne el promedio de los pesos de las personas cargadas. El valor retornado mostrarlo en el programa.
f) El programa solo termina con F para finalizar. Si ingresa cualquier otro valor mostrar “Error”
Resolución
12. Manejo de Matrices
A continuación se presenta la consigna y la solución desarrollada por los alumnos en clase. Para cada función se presentaron códigos de lo más variado. No existió un criterio para definir el código de quién se subía al aula. En parte, sirve para ver la variedad de formas de pensar que existen.
13. Más sobre matrices
14. Diccionarios. Facturas
Crear un diccionario que permita almacenar N facturas. La es clave el numero de factuira
y el valor el importe de la misma.
La carga finaliza cuando el usuario contesta que no desea cargar mas datos.
Luego, realizar las funciones necesarias para:
1) Mostar todo el diccionario
2) Imprimir solo los facturas con importe superior a 1000
3) consultar la factura ingresando el nro de factura
Si el alumno lo desea, puede rearmar el ejercicio utilizando un menu para las opciones 1,2 y 3.
'''
''' punto carga de facturas '''
def cargar():
facturas = {}
continua = "s"
while continua=="s":
nro = input("Ingrese el numero de la factura:")
importe = float(input("Ingrese el precio:"))
facturas[nro] = importe
continua = input("Quiere cargar otra factura:[s/n]")
return facturas
''' Muestra del dicionario'''
def mostrar(facturas):
print("Listado de todos las facturas")
for x in facturas:
print(x, facturas[x])
''' Mustra de facturas mayores a 1000'''
def imprimir_mayor(facturas):
print("Listado de facturas con importes mayores a 1000")
for nro in facturas:
if facturas[nro]>1000:
print(nro)
''' Busqueda de facturas por nro de factura'''
def buscar(facturas):
buscado=input("ingrese nro de factura a buscar")
if buscado in facturas:
print(" la factura se ha encontrado y el importe es {}".format(facturas[buscado]))
else:
print(" no se ha encontrado")
fact=cargar()
mostrar(fact)
imprimir_mayor(fact)
buscar(fact)
15. Area de Rectangulo
Realiza una función llamada area_rectangulo(base, altura) que devuelva el área del rectangulo a partir de una base y una altura. Se pide ingresar base y altura y le función calcula y muestra el Area del Rectángulo.
def area_rectangulo(base, altura):
return base*altura
altura=int(input("Ingrese Altura: "))
base=int(input("Ingrese Base: "))
print( area_rectangulo(base,altura) )
16. Area de Círuculo
Realiza una función llamada area_circulo(radio) que devuelva el área de un círculo a partir de un radio ingresado por teclado.
Solución:
import math
def area_circulo(radio):
return (radio**2) * math.pi
radio=int(input("Ingrese Radio: "))
print( area_circulo(radio))
17. Punto Intermedio
Realiza una función llamada intermedio(a, b) que a partir de dos números ingresados por teclado, devuelva su punto intermedio.
Solución:
def intermedio(a, b):
return (a + b) / 2
a=int(input("Ingrese 1er Valor: "))
b=int(input("Ingrese 2do Valor: "))
print( intermedio(a,b) )
18. Valor dentro de un intevalo
Se desea saber si un número se encuentra dentro de un segmento, fuera del segmento por encima o debajo.
Crear una función que regresa True o False. Recibe como argumento 3 números Reales: min,max,x.
y verifica si min<=x<=max, en ese caso regresa True. Caso contrario False.
Solución:
def posicion(x, minimo, maximo):
if x < minimo:
return "debajo"
elif x > maximo:
return "encima"
return "dentro"
minimo=int(input("Ingrese mínimo: "))
maximo=int(input("Ingrese máximo:"))
x=int(input("Ingrese x: "))
print("En número ingresado se encentra ",posicion(x, minimo,maximo), "del segmento")
¿Que sucede si mínimo>maximo?
19. Separar Listas Pares e impares
Realiza una función separar(lista)
que tome una lista de números enteros DEFINIDA en el script y regresa dos listas ordenadas.
La primera con los números pares y la segunda con los números impares.
Recordar :
numeros = [-12, 84, 13, 20, -33, 101, 9] #Lista definida en el script
def separar(lista):
lista.sort()# método ordenar lista
pares = [] # creo una lista vacia
impares = [] # creo una lista vacia
for n in lista:
if n%2 == 0:
pares.append(n) #método append(), agrega elementos a la lista
else:
impares.append(n) #método append(), agrega elementos a la lista
return pares, impares # ver que retorna 2 valores!
pares, impares = separar(numeros)
print(pares)
print(impares)
¿Que es eso append()? La respuesta está aquí
20. Valores entre dos enteros.
Escribir el código que permita ingresar dos enteros , llame a una función pasando esos enteros como argumentos y muestre los valores comprendidos entre esos enteros.
Solución:
def numerosEntre(num1, num2):
if (num1 > num2):
aux = num1
num1 = num2
num2 = aux
for i in range(num1+1, num2):
print(i)
x=int(input("Ingrese x: "))
y=int(input("Ingrese y: "))
numerosEntre(x,y)
¿Que sucede si x>y?
21. Factorial
Crear un programa que pida el ingreso de un nro. entero positivo y calcule el factorial.
Solución
def factorial(num):
resultado = num
for i in range(num-1,1,-1): #interpretar los argumentos de range!
resultado = resultado * i
return resultado
x=int(input("Ingrese x, calcularemos x!: "))
print(factorial(x))
¿Que sucede x es negativo?Que sucede si x es cero?
22. Números Aleatorios
Hacer una función que nos genere 10 numeros aleatorios entre dos parámetros x ,y pasados.
from random import *
def generaNumeroAleatorio(minimo,maximo):
try:
if minimo > maximo:
aux = minimo
minimo = maximo
maximo = aux
return randint(minimo, maximo)
except TypeError:
print("Debes escribir numeros")
return -1
x=int(input("Ingrese mínimo: "))
y=int(input("Ingrese máximo: "))
i=0
while i<10:
print(generaNumeroAleatorio(x,y))
i=i+1
¿Que es eso e try? La respuesta está aquí
23. Banderas de países
Banderas de países
Realizar un programa con menú para cargar banderas de países con bandas tricolores.
El país sería la clave y los colores van en una lista. Cada opción llama a una función:
Menú:
A- cargar una bandera de país
B- buscar por país
C- buscar por color
S- salir
* Cuando el usuario ingresa una opción del menú incorrecta, mostrar un mensaje
* El programa finaliza cuando presiona la "S", considerar también las minúsculas
* A la carga, se le pasa como parámetro el nombre del pais y retorna True cuando finaliza la carga.
* Considerar antes de cargar un pais si éste ya no fue cargado, en ese caso emitir un mensaje
y permitir el reingreso de otro nombre de pais.
* Permitir la carga de más de un pais, preguntando luego de la carga del primero si quiere ingresar otro, si presiona el usuario "S" permitirá ingresar un segundo, en caso que presione cualquier otra tecla, volverá al menú principal.
* Permitir al usuario ingresar el color que busca, si está que muestre el país, pero si no está retorne False yemita un mensaje en el programa principal.
Si el usuario elige la opcion A debe llamar a la funcion carga con argumento el nombre del pais, retorna un booleano.
Si el usuario elige la opción B debe llamar a la función buscapais que recibe como argumento el país a buscar y en la función muestra si encontró el nombre del país y los colores. Retorna un booleano que se evalúa en el programa principal por el False indicando que no se encontró el país.
Si el usuario elige la opción C debe llamar a la función buscacolor recibe como argumento el color a buscar. En la función, si encuentra, indica qué país tiene ese color caso contrario, emite un mensaje de "no encontrado". No retorna nada.
Controlar que para realizar la opcion B o C antes debe haber cargado por lo menos un pais.
23.1. Resolución def
23.2. Resolución programa principal
24. Ejercicio Empresa
Enunciado
Se desea desarrollar un programa para el control de empleados en una empresa. El mismo debe contar con las siguientes funciones:
- Función Menu
- Función Carga
- Función Turnos
- Función Sectores
Función Menu:
- No recibe argumentos
- Debe mostrar en pantalla el siguiente menú:
MENU:
1: Carga de empleados
2: Cantidad de empleados por turno
3: Promedio de horas por sector
S: Salir - Debe retornar la opción elegida por el usuario
- Se debe llamar a esta función repetitivamente hasta que el usuario ingrese la opción "S".
Función Carga
-
Recibe como argumentos la cantidad de empleados a cargar (mayor a 0 y menor a 1000) y la lista donde se deben cargar.
-
Por cada empleado se debe crear un diccionario con las siguientes claves y valores:
“legajo” : un número entero entre 0 y 1000
“edad” : un número entero entre 18 y 65
“sector” : un caracter (M: Mantenimiento, A: Administración, O: Operarios)
“turno” : un caracter (M o T)
“horas”: un número entre 10 y 40 -
Una vez cargado, el diccionario se debe agregar a la lista de empleados
Función Turnos
- Recibe como argumentos un turno elegido por el usuario y la lista de empleados
- Muestra en pantalla la cantidad de empleados que trabajan en dicho turno
Función Sectores
- Recibe como argumentos un sector elegido por el usuario y la lista de empleados.
- Retorna al programa principal el promedio de horas de trabajo en el sector elegido.
24.1. Paso 1: Estructura principal
Pasos a seguir para desarrollar el programa
Paso 1: Armar la estructura general del programa
Armo la estructura del programa con las definiciones de las funciones
- Función Menu
- Función Carga
- Función Turnos
- Función Sectores
En el programa principal, creo la lista vacía para almacenar los empleados.
24.2. Paso 2: Función Menú
Paso 2: Función Menú
- No recibe argumentos
- Debe mostrar en pantalla el siguiente menú:
MENU:
1: Carga de empleados
2: Cantidad de empleados por turno
3: Promedio de horas por sector
S: Salir
- Debe retornar la opción elegida por el usuario
¿Cómo me aseguro de que el usuario ingresa alguna de estas opciones y no otras?
24.3. Paso 3: Estructura del programa Principal
¿Cómo voy a llamar a la función "menu"?
¿Qué estructura repetitiva utilizo para que el programa se repita hasta que el usuario ingrese "S"?
¿Qué estructura utilizo para ingresar a las opciones del menú?
24.4. Paso 4: Función Validar (OPCIONAL)
Como en la consigna veo que se van a solicitar muchos ingresos de números, para validar que se encuentren en los rangos correctos voy a utilizar la función “validar”.
24.5. Paso 5: Función Carga
- Recibe como argumentos la cantidad de empleados a cargar (mayor a 0 y menor a 1000) y la lista donde se deben cargar.
- Por cada empleado se debe crear un diccionario con las siguientes claves y valores:
“legajo” : un número entero entre 0 y 1000
“edad” : un número entero entre 18 y 65
“sector” : un caracter (M: Mantenimiento, A: Administración, O: Operarios)
“turno” : un caracter (M o T)
“horas”: un número entre 10 y 40
- Una vez cargado, el diccionario se debe agregar a la lista de empleados
En la definición de la función agrego los argumentos que recibe.
En el programa principal se debe solicitar el ingreso de la cantidad de empleados a cargar.
¿Qué estructura uso para repetir la carga con cada empleado?
Ahora debo solicitar los ingresos para cada clave del diccionario.
24.6. Paso 6: Función Turnos
-
Recibe como argumentos un turno elegido por el usuario y la lista de empleados
-
Muestra en pantalla la cantidad de empleados que trabajan en dicho turno
En la definición de la función agrego los argumentos que recibe.
En el programa principal solicito el ingreso de un turno (M o T).
¿Cómo puedo recorrer la lista para contar la cantidad de empleados en el turno?
24.7. Paso 7: Función Sectores
-
Recibe como argumentos un sector (M, A, O) elegido por el usuario y la lista de empleados.
-
Retorna al programa principal el promedio de horas de trabajo en el sector elegido.
En la definición de la función agrego los argumentos que recibe.
En el programa principal solicito al usuario el ingreso del sector.
¿Cómo llamo a la función desde el programa principal?
Ahora defino la función:
¿Qué necesito conocer para calcular el promedio?
¿Cómo utilizo estos contadores para sumar la cantidad de horas y de empleados por sector?
¿Qué pasa si la cantidad de empleados en el sector es 0? ¿Cómo salvo el error de división por cero?
24.8. Programa Completo
FUNCIONES
PROGRAMA PRINCIPAL
24.9. Opcional
25. Cantidad elementos seguidos
Escribir una función empaquetar para una lista, donde epaquetar significa indicar la repetición de valores consecutivos mediante una tupla (valor, cantidad de repeticiones). Por ejemplo, empaquetar ([1, 1, 1, 3, 5, 1, 1, 3, 3]) debe devolver [(1, 3) , (3, 1) , (5, 1), (1, 2), (3, 2)].
25.1. Solución
# -*- coding: utf-8 -*- """ Editor de Spyder Este es un archivo temporal """ def empaquetar(l): cantidad=len(l) salida=[] cont=1 for t in range(cantidad-1):# -1 por que tengo t+1 if l[t]==l[t+1]: cont+=1 elif t==cantidad-2:#los dos ultimos print("x") temp=[l[t],1] salida.append(tuple(temp)) temp=[l[t+1],1] salida.append(tuple(temp)) else: temp=[l[t],cont] salida.append(tuple(temp)) cont=1 return(salida) l=[] n=int(input("Cuantos enteros tiene la lista? :")) for x in range(n): l.append(int(input("Ingrese un entero:"))) print("La lista a empaquetar es: ",l) print(empaquetar(l))