s3Eva_IIT2016_T1 Facturar llamadas telefónicas

Ejercicio: 3Eva_IIT2016_T1 Facturar llamadas telefónicas

Propuesta de solución en Python, El ejercicio tiene tarea por completar.

Para las pruebas, requiere el archivo clientes01.csv en el mismo directorio del archivo.py

# 3ra Evaluación II Término 2016-2017
# Tema 1. Facturar llamadas telefónicas
# se incluye la estructura de diccionarios.
# Tarea: Completar facturación y estadísticas

def obtenerClientes(nombreArchivo):
    facturar={}

    archivo=open(nombreArchivo,'r')
    linea = archivo.readline()
    while not(linea==''):
        linea=linea.strip('\n')
        partes=linea.split(',')
        ced = partes[0]
        num = partes[1]
        sec = partes[2]
        parm = partes[3].split('|')
        nac = float(parm[0])
        ext = float(parm[1])
        est = partes[4]

        if not(ced in facturar):
            facturar[ced] = {num:{
                             'sector': sec,
                             'nacional': nac,
                             'internac': ext,
                             'estado': est }}
        else: 
            facturar[ced][num] = {
                             'sector': sec,
                             'nacional': nac,
                             'internac': ext,
                             'estado': est }
        
        linea = archivo.readline()
    archivo.close()
    
    return(facturar)

def generarFactura(tabla):
    # Lista de clientes
    cedulas = tabla.keys()
    cedulas = list(cedulas)
    n = len(cedulas)

    # Mostrar cada cliente
    i = 0
    while not(i>=n):
        # Para pantalla
        # print(cedulas[i])
        # Cada archivo
        narchivo = cedulas[i] + '.txt'
        archivo = open(narchivo, 'w')
        archivo.write('Empresa Telefonica de Guayaquil \n')
        archivo.write('cliente: ' + cedulas[i] + '\n')
        archivo.write('Detalle Deuda: \n')

        tablanumeros = tabla[cedulas[i]]
        # print(tablanumeros)
        numeros = tablanumeros.keys()
        numeros = list(numeros)
        # print(numeros)
        m = len(numeros)
        j=0
        while not(j>=m):
            datos = tablanumeros[numeros[j]]
            nac = tablanumeros[numeros[j]]['nacional']
            costonac = nac * 0.03
            archivo.write(numeros[j] + ' nac: '+str(costonac)+ '\n')
            j=j+1
        
        archivo.close()
        
        i=i+1
    return()

# PROGRAMA
# INGRESO
narchivo = 'clientes.csv'

# PROCEDIMIENTO
tabla = obtenerClientes(narchivo)

# SALIDA
generarFactura(tabla)

# -------
# Usado para explicación de uso de diccionarios
### Lista de clientes
##cedulas = tabla.keys()
##cedulas = list(cedulas)
##n = len(cedulas)
##
### Salida
##print('los clientes son: ', cedulas)
##print('los datos del cliente son:')
##for i in range(0,n,1):
##    print(cedulas[i])
##    numeroscedula = tabla[cedulas[i]].keys()
##    print(numeroscedula)

s3Eva_IIT2016_T2 Juntas receptoras de voto

Ejercicio: 3Eva_IIT2016_T2 Juntas receptoras de voto

Propuesta de solución en Python:

Archivos para prueba:

JRV_Harchivo.txt
JRV_Marchivo.txt
JRV_Candidatosarchivo.txt

# 3ra Evaluación II Término 2016
# TEMA 2. Juntas receptoras del voto
import numpy as np

def contarVotos(JRV_H, JRV_M):
    cuenta_H = np.sum(JRV_H, axis=0)

    # Suma columnas
    tamano = np.shape(JRV_M)
    nvotantes = tamano[0]
    ncandidatos = tamano[1]
    cuenta_M = np.zeros(ncandidatos, dtype=int)
    for columna in range(0,ncandidatos,1):
        fila = 0 # cambiar a for
        while not(fila>=nvotantes):
            cuenta_M[columna] = cuenta_M[columna] + JRV_M[fila, columna]
            fila=fila+1
            
    conteo = cuenta_H + cuenta_M
    conteo = tuple(conteo)
    return(conteo)

def segundaVuelta(JRV_H, JRV_M):
    respuesta = 0
    conteo = contarVotos(JRV_H, JRV_M)
    conteo = np.array(conteo)
    total = np.sum(conteo)
    primero = np.argmax(conteo)
    votos1 = conteo[primero]
    conteo[primero] = 0
    segundo = np.argmax(conteo)
    votos2 = conteo[segundo]
    
    limite40 = 0.4*total
    limite10 = 0.1*total
    if (votos1<=limite40):
        diferencia = votos1-votos2
        if (diferencia<=limite10): respuesta = 1 return(respuesta) def estadistica(JRV_H, JRV_M, candidatos, nombre): conteo = contarVotos(JRV_H, JRV_M) conteo = np.array(conteo) #Buscar posicion nombre del candidato donde = -1 n = len(candidatos) i = 0 while not(i>=n or donde>=0):
        if (nombre == candidatos[i]):
            donde = i
        i=i+1
    votos = conteo[donde]
    
    # Votos hombres y mujeres
    cuenta_H = np.sum(JRV_H, axis=0)
    votos_H = cuenta_H[donde]
    votos_M = votos - votos_H

    respuesta = [nombre, votos_H, votos_M]
    return(respuesta)

# PROGRAMA
# INGRESO
nJRV_H = 'JRV_Harchivo.txt'
nJRV_M = 'JRV_Marchivo.txt'
ncandidatos = 'JRV_Candidatosarchivo.txt'

# PROCEDIMIENTO
# Lectura de datos desde archivos
JRV_H = np.loadtxt(nJRV_H)
JRV_M = np.loadtxt(nJRV_M)

candidatos =[]
archivo = open(ncandidatos,'r')
linea = archivo.readline()
linea = linea.strip('\n')
while not(linea==''):
    candidatos.append(linea)
    linea = archivo.readline()
    linea = linea.strip('\n')
archivo.close()

# Conteo de votos y revisión de 2da Vuelta
conteo = contarVotos(JRV_H, JRV_M)
revisa2da = segundaVuelta(JRV_H, JRV_M)

# Estadísticas para todos los candidatos
tabla = {}
k = len(candidatos)
j=0
while not(j>=k):
    nombre = candidatos[j]
    revisaest = estadistica(JRV_H, JRV_M, candidatos, nombre)
    H = revisaest[1]
    M = revisaest[2]
    tabla[nombre] = {'conteo_H':H,'conteo_M': M}
    j=j+1

# Salida
print('Tabla:  JRV_H')
print(JRV_H)
print('Tabla:  JRV_M')
print(JRV_M)
print('Lista:  candidatos ')
print(candidatos)
print('Conteo de votos:')
print(conteo)
print('Hay segunda vuelta: ', revisa2da)
print('Revisión estadística: ')
print(tabla)

S3Eva_IT2016_T2 sensar cultivos con dron

Ejercicio: 3Eva_IT2016_T2 sensar cultivos con dron

Propuesta de solución en Python:

# 3ra Evaluación I Término 2016
# tema 2. drones en cultivo
import numpy as np
import random 

def  sensarCultivos(posicion):
    # Solo para generar una matriz que
    # permita trabajar con el programa
    valor=int(random.random()*10+1)
    return(valor)

def generarplantacion(dimension):
    n=dimension[0]
    m=dimension[1]
    plantacion=np.zeros(shape=(n,m),dtype=int)
    i=0
    while not(i>=n):
        j=0
        while not(j>=m):
            posicion=[i,j]
            valor = sensarCultivos(posicion)
            plantacion[i,j]=valor
            j=j+1
        i=i+1
    return(plantacion)

# usa matriz densidad de 1 y 0 para facilitar 
# el cálculo del literal c
def analizarDensidad(plantacion, limite):
    tamano=np.shape(plantacion)
    n=tamano[0]
    m=tamano[1]
    densidad=np.zeros(shape=(n,m),dtype=int)
    resultado=[]
    i=0
    while not(i>=n):
        fila=[]
        j=0
        while not(j>=m):
            if (plantacion[i,j]>=limite):
                densidad[i,j]=1
                fila.append('ALTO')
            else:
                fila.append('Bajo')
            j=j+1
        resultado.append(fila)
        i=i+1
    
    return(densidad)

def reporteCrecimento(plantacion,densidad):
    tamano=np.shape(plantacion)
    n=tamano[0]
    m=tamano[1]
    casillas=n*m
    
    sumaALTO=0
    sumaBAJO=0
    i=0
    while not(i>=n):
        j=0
        while not(j>=m):
            valor=plantacion[i,j]
            if (densidad[i,j]==1):
                sumaALTO=sumaALTO+valor
            else:
                sumaBAJO=sumaBAJO+valor
            j=j+1
        i=i+1
    prmALTO=sumaALTO/(np.sum(densidad))
    prmBAJO=sumaBAJO/(n*m-np.sum(densidad))
    promedio=[prmALTO,prmBAJO]
    return(promedio)

crear un archivo de funciones para importar si las funciones se crean en otro archivo.

import dronescultivos as dron

# PROGRAMA
# INGRESO , usa datos aleatorios como prueba
dimension = (3,4)
plantacion = dron.generarplantacion(dimension)

#PROCEDIMIENTO
limite = 4
densidad = dron.analizarDensidad(plantacion, limite)
reporte = dron.reporteCrecimento(plantacion,densidad)

#SALIDA
print(plantacion)
print(densidad)
print(reporte)

s3Eva_IIT2015_T3 funciones matrices rotar, extraer

Ejercicio: 3Eva_IIT2015_T3 funciones matrices rotar, extraer

Propuesta de solución en Python

Tarea: Integrar con tema 4

# 3ra Evaluación II Término 2015-2016
# Tema 3 y 4 para reorientar codigo QR
# propuesta: edelros@espol.edu.ec
# version con lazos y condicionales. 
# tarea: simplificar con 'for'

import numpy

# Tema 3 a)
def rotando(matriz,k):
    cuenta=0    #cuenta rotaciones
    while not(cuenta>=k):
        n,m=matriz.shape 
        tabla=numpy.zeros(shape=(m,n),dtype=int)
        i=0     #inicia rotación
        while not(i>=n):
            j=0
            while not(j>=m):
                f=j
                c=(n-1)-i
                tabla[f,c]=matriz[i,j]
                j=j+1
            i=i+1
        matriz=numpy.copy(tabla)
        cuenta=cuenta+1
    return(matriz)

# Tema 3 b) funcion para extraer una esquina 
# de tamaño t de una matriz
# k=0 ;esquina superior izquierda 
# k=1 ;esquina superior derecha
# k=3 ;esquina inferior izquierda 
# k=2 ;esquina inferior derecha
def extraeresquina(matriz,k,t):
    n,m=matriz.shape
    esquina=numpy.zeros(shape=(t,t), dtype=int)
    i=0
    while not(i>=t):
        j=0
        while not(j>=t):
            if (k==0):
                f=i
                c=j
            if (k==1):
                f=i
                c=(m-t)+j
            if (k==2):
                f=(n-t)+i
                c=(m-t)+j
            if (k==3):
                f=(n-t)+i
                c=j
            esquina[i,j]=matriz[f,c]
            j=j+1
        i=i+1   
    return(esquina)

s3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

Ejercicio: 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

Propuesta de solución en Python 3ra Eva. II Término 2015 Tema 1

Tarea: Integrar con Tema 2

# FCNM-ESPOL.3ra Evaluación II Término 2015
# Tema 1 y 2. Tendencias en redes sociales
# propuesta: edelros@espol.edu.ec
# version con lazos y condicionales. tarea: simplificar con 'for'

import numpy

# Tema 1. literal a)
def buscaetiqueta(mensaje):
    etiquetas=[]
    n=len(mensaje)
    copia=0
    i=0
    while not(i>=n):
        if (mensaje[i]=='#'): #Inicia copia etiqueta
            copia=1
            encontre=''
        if (copia==1):
            encontre=encontre+mensaje[i]
            if (i<(n-1)):
                if (mensaje[i+1]==' ' or mensaje[i+1]==','):
                    copia=0
                    etiquetas.append(encontre)
            if (i==(n-1)):
                etiquetas.append(encontre)
        i=i+1
    return(etiquetas)

# Tema 1. literal b)
def tabulando(lista):
    n=len(lista) # usando listas
    repetido=numpy.zeros(n,dtype=int)
    numrepetido=0
    i=0     # Marcando repetidos
    while not(i>=(n-1)):
        j=i+1
        while not(j>=n):
            if (lista[i]==lista[j]):
                repetido[j]=1
                numrepetido=numrepetido+1
            j=j+1
        i=i+1
    #copia vector unicos, tabula usando arreglo
    unicos=[]
    i=0
    while not(i>=n):
        if (repetido[i]==0):
            unicos.append([lista[i],0])
        i=i+1
    k=len(unicos)
    # Cuenta y Acumula
    i=0
    while not(i>=n):
        j=0     #busca posicion en unicos
        while not(j>=k):
            if (lista[i]==unicos[j][0]):
                unicos[j][1]=unicos[j][1]+1
            j=j+1
        i=i+1
    return(unicos)

s3Eva_IT2015_T1 Maquina con monedas

Ejercicios: 3Eva_IT2015_T1 Maquina con monedas

Literal a:

# 3Eva_IT2015_T1 Maquina con monedas
import numpy as np

# INGRESO
valor = float(input('valor: '))

# PROCEDIMIENTO
centavos = (valor - int(valor))*100
centavos = int(centavos)

cantidad = np.zeros(4,dtype=int)
cantidad[0] = centavos
numero = int(valor)
i = 1
while not(numero == 0 or i>=4):
    digito = numero%10
    numero = numero//10
    cantidad[i] = digito
    i = i + 1

# SALIDA
print(cantidad)

prueba:

valor: 435.16
[16  5  3  4]
>>> 

tarea: convertir a función

literal b:

# 3Eva_IT2015_T1 Maquina con monedas
import numpy as np

# INGRESO
centavos = int(input('devolver: '))

# PROCEDIMIENTO
monedas = np.array([1,5,10,25,50])
tamano = len(monedas)
devolver = centavos
cantidad = np.zeros(tamano, dtype = int)
i = tamano - 1
while not(i < 0):
    cantidad[i] = devolver//monedas[i]
    devolver = devolver%monedas[i]
    i = i-1

# SALIDA
print(monedas)
print(cantidad)

prueba:

devolver: 63
[ 1  5 10 25 50]
[3 0 1 0 1]
>>> 

tarea: convertir a función

s3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

Ejercicio: 3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

Propuesta de solución en Python para 3ra Eva. II Término 2015 Tema 3 y 4.

Los archivos para probar el algoritmo son:

codigoQR.txt

referenciaQR.txt

# 3ra Evaluación II Término 2015-2016
# Tema 3 y 4 para reorientar codigo QR
# propuesta: edelros@espol.edu.ec
# version con lazos y condicionales. tarea: simplificar con 'for'
import numpy
# Tema 3 a)
def rotando(matriz,k):
    cuenta=0    #cuenta rotaciones
    while not(cuenta>=k):
        n,m=matriz.shape 
        tabla=numpy.zeros(shape=(m,n),dtype=int)
        i=0     #inicia rotación
        while not(i>=n):
            j=0
            while not(j>=m):
                f=j
                c=(n-1)-i
                tabla[f,c]=matriz[i,j]
                j=j+1
            i=i+1
        matriz=numpy.copy(tabla)
        cuenta=cuenta+1
    return(matriz)

# Tema 3 b) funcion para extraer una esquina de tamaño t de una matriz
# k=0 ;esquina superior izquierda # k=1 ;esquina superior derecha
# k=3 ;esquina inferior izquierda # k=2 ;esquina inferior derecha
def extraeresquina(matriz,k,t):
    n,m=matriz.shape
    esquina=numpy.zeros(shape=(t,t), dtype=int)
    i=0
    while not(i>=t):
        j=0
        while not(j>=t):
            if (k==0):
                f=i
                c=j
            if (k==1):
                f=i
                c=(m-t)+j
            if (k==2):
                f=(n-t)+i
                c=(m-t)+j
            if (k==3):
                f=(n-t)+i
                c=j
            esquina[i,j]=matriz[f,c]
            j=j+1
        i=i+1   
    return(esquina)

# Programa para orientar el codigo QR
# ingreso por lectura desde un archivo
codigo=numpy.loadtxt('codigo.txt',dtype=int)
referencia=numpy.loadtxt('referencia.txt',dtype=int)

# codigo=rotando(codigo,1) # probando rotacion
# comparando código y esquinas de referencia
t,r=referencia.shape
compara=numpy.zeros(4, dtype=int) #resultados por esquina
k=0  #compara esquinas
while not(k>=4):
    esquina=extraeresquina(codigo,k,t)
    esqgirada=rotando(referencia,k)
    compara[k]=numpy.array_equal(esquina,esqgirada)
    k=k+1
# Selecciona la rotacion
if (compara[0]==1 and compara[1]==1 and compara[2]==0 and compara[3]==1):
    orientado=rotando(codigo,0)
if (compara[0]==1 and compara[1]==0 and compara[2]==1 and compara[3]==1):
    orientado=rotando(codigo,1)    
if (compara[0]==0 and compara[1]==1 and compara[2]==1 and compara[3]==1):
    orientado=rotando(codigo,2)
if (compara[0]==1 and compara[1]==1 and compara[2]==1 and compara[3]==0):
    orientado=rotando(codigo,3)

# Salida
print(orientado)

.

s3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

Ejercicio: 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

Propuesta de solución en Python 3ra Eva. II Término 2015 Tema 1 y 2

# FCNM-ESPOL.3ra Evaluación II Término 2015
# Tema 1 y 2. Tendencias en redes sociales
# propuesta: edelros@espol.edu.ec
# version con lazos y condicionales. tarea: simplificar con 'for'

import numpy
# Tema 1. literal a)
def buscaetiqueta(mensaje):
    etiquetas=[]
    n=len(mensaje)
    copia=0
    i=0
    while not(i>=n):
        if (mensaje[i]=='#'): #Inicia copia etiqueta
            copia=1
            encontre=''
        if (copia==1):
            encontre=encontre+mensaje[i]
            if (i<(n-1)):
                if (mensaje[i+1]==' ' or mensaje[i+1]==','):
                    copia=0
                    etiquetas.append(encontre)
            if (i==(n-1)):
                etiquetas.append(encontre)
        i=i+1
    return(etiquetas)
# Tema 1. literal b)
def tabulando(lista):
    n=len(lista) # usando listas
    repetido=numpy.zeros(n,dtype=int)
    numrepetido=0
    i=0     # Marcando repetidos
    while not(i>=(n-1)):
        j=i+1
        while not(j>=n):
            if (lista[i]==lista[j]):
                repetido[j]=1
                numrepetido=numrepetido+1
            j=j+1
        i=i+1
    #copia vector unicos, tabula usando arreglo
    unicos=[]
    i=0
    while not(i>=n):
        if (repetido[i]==0):
            unicos.append([lista[i],0])
        i=i+1
    k=len(unicos)
    # Cuenta y Acumula
    i=0
    while not(i>=n):
        j=0     #busca posicion en unicos
        while not(j>=k):
            if (lista[i]==unicos[j][0]):
                unicos[j][1]=unicos[j][1]+1
            j=j+1
        i=i+1
    return(unicos)

# Tema 2. Admnistra mensajes de una red social
usuario=[]
mensaje=[]
opcion=0
while not(opcion==4):
    print('1. Ingresar mensaje')
    print('2. Usuario frecuente')
    print('3. Tendencias')
    print('4. Salir')
    opcion=int(input('cual opcion: '))
    if (opcion==1):
        print('1. Ingresar mensaje')
        quien=input('nombre usuario: ')
        dice=input('mensaje: ')
        usuario.append(quien)
        mensaje.append(dice)
    if (opcion==2):
        print('2. Usuario frecuente')
        quienes=tabulando(usuario)
        n=len(quienes)
        mayor=0
        k=1
        while not (k>=n):
            if (quienes[k][1]>quienes[mayor][1]):
                mayor=k
            k=k+1
        print('los usuarios:')
        print(quienes)
        print('el usuario mas frecuente es: ',quienes[mayor][0])
    if (opcion==3):
        print('3. Tendencias')
        n=len(mensaje)
        todaetiqueta=[]
        i=0
        while not(i>=n):
            cuales=buscaetiqueta(mensaje[i])
            m=len(cuales)
            if (m>0):
                j=0 #añade cada etiqueta
                while not(j>=m):
                    todaetiqueta.append(cuales[j])
                    j=j+1
            i=i+1
        etiquetas=tabulando(todaetiqueta)
        n=len(etiquetas)
        mayor=0
        k=1
        while not (k>=n):
            if (etiquetas[k][1]>etiquetas[mayor][1]):
                mayor=k
            k=k+1
        print(etiquetas)
        print('La tendencia es: ',etiquetas[mayor][0])
    if (opcion==4):
        print('Gracias por usar el software')

.

s3Eva_IIIT2003_T2 Separar lista socios club por género

Ejercicio: 3Eva_IIIT2003_T2 Separar lista socios club por género

Propuesta de solución en Python:

# 3Eva_IIIT2003_T2
# Separar lista socios club por género

# INGRESO
nombre = []
genero = []
edad = []
finalizado = 0
while (finalizado == 0):
    unnombre = input('un nombre:  ')
    ungenero = input('genero M/F: ')
    unaedad =  int(input('edad:   '))
    finalizado = int(input('finalizar 0/1:'))
    # añade datos a la lista
    nombre.append(unnombre)
    genero.append(ungenero)
    edad.append(unaedad)

# PROCEDIMIENTO
n = len(nombre)
hombres = []
mujeres = []
i = 0
while not(i>=n):
    if (genero[i]=='M'):
        hombres.append(nombre[i])
    if (genero[i]=='F'):
        mujeres.append(nombre[i])
    i = i+1

# SALIDA
print('hombres: ',hombres)
print('mujeres: ',mujeres)

s3Eva_IIIT2003_T1 Funciones lógicas pyq y poq

Ejercicio: 3Eva_IIIT2003_T1 Funciones lógicas pyq y poq

Propuesta de solución en Python, se desarrollan dos partes: funciones y programa

Las funciones se incorporan al bloque de inicio.
El programa sigue los bloques de ingreso, procedimiento y salida

# 3Eva_IIIT2003_T1 Funciones lógicas pyq y poq
def pyq(p,q):
    #validar
    resultado = -1
    if (p==0 or p==1):
        if (q==0 or q==1):
            resultado = p*q
    return(resultado)
def poq(p,q):
    #validar
    resultado = -1
    if (p==0 or p==1):
        if (q==0 or q==1):
            resultado = p*q
            if resultado>1:
                resultado = 1
    return(resultado)

# INGRESO
p = int(input('p: '))
q = int(input('q: '))
# PROCEDIMIENTO
respuesta1 = poq(pyq(p,q),pyq(p,q))
respuesta2 = poq(p,pyq(p,q))
# SALIDA
print('(p ∧ q) ∨ (p ∧ q): ',respuesta1)
print('p ∨ (p ∧ q): ', respuesta2)