Si se leen dos números ¿Cómo determinar el mayor de ellos?. Del mismo modo, si un producto es de tipo 1, se aplica el 5% de decuento, ¿Cómo saber si es de tipo 1?
En el primer caso:
Leemos el primer número:
>>>n = int(input("Ingresa el primer número: "))
>>>m = int(input("Ingresa el segundo número: "))
Podemos dejar a numpy que lo determine
>>>import numpy as np
Usando la función minimum(...) podemos saberlo
>>>print("El menor es: ",np.minimum(m,n))
El menor es: 20
¿Pero, en el caso de los productos de tipo 1 que tienen descuento del 5%?
Aquí ya no nos asiste numpy
Este tipo de cálculo es lo que se conoce como cálculos o decisiones condicionales.En Python la sentencia que se emplea es if ...
Sintaxis
Primera forma:
if expresion :
sentencia-1
sentencia-2
.....
<===== Esta línea debe estar vacía
Segunda forma:
if expresion :
sentencia-1
sentencia-2
....
else: sentencia-1
sentencia-2
....
<===== Esta línea debe estar vacía
Tercera forma:
if expresion :
sentencia-1
sentencia-2
....
elif expresion:
sentencia-1
sentencia-2
....
else: sentencia-1
sentencia-2
....
<===== Esta línea debe estar vacía
En todos estos casos, expresion contiene la comparación lógica de dos variables o subcadenas en la forma subcadenaA R subcadenaB, donde R es el operador relacional, definido en la siguiente tabla.
Operador |
|
|
---|---|---|
|
espresionA == espresionB | Si expresionA es igual a expresionB |
|
espresionA != espresionB | Si expresionA no es igual a expresionB |
|
espresionA < espresionB | Si expresionA es menor que expresionB |
|
espresionA > espresionB | Si expresionA es mayor que expresionB |
|
espresionA <= espresionB | Si expresionA es menor o igual que expresionB |
|
espresionA >= espresionB | Si expresionA es mayor o igual que expresionB |
Ejemplos de la primera forma:
>>>m = 15
>>>n = 30
>>> if m
print("El menor de ellos es m")
Otro ejemplo
>>> a=["Carlos",45]
>>> b=["Cesar",35]
>>>if a[1]>b[1]:
print(a[0], "es mayor que ",b[0])
En ambos ejemplos: ¿Qué ocurre si no es cierta la comparación? Debemos usar la segunda forma de sintaxis.
En el primer ejemplo:
>>> if m < n
print("m =",m," es menor que","n = ",n)
else:
print("n =",n," es menor que","m = ",m)
Si ahora
>>>m = 28
>>>n = 12
Un momento, tome en cuenta la siguiente nota:
Nota
Para que no vuelva a digitar otra vez la instrucción if, lleve el puntero del ratón hasta el "interior" del if (en general de una sentencia compuesta de una o más filas) o haga clic al interior de dicha sentencia, luego presione [Intro], para llevar el código a la línea activa de la consola.
>>> if m<n
print("m =",m," es menor que","n = ",n)
else:
print("n =",n," es menor que","m = ",m)
Y aquí ya se puede hacer la modificación deseada.
Como el abogado del diablo: ¿Y si las dos variables tienen el mismo valor?
Una decisión más completa será usar la tercera forma de sintaxis.
>>> if m < n:
print("m =",m," es menor que","n = ",n)
elif n<m:
print("n =",n," es menor que","m = ",m)
else:
print("Ambos son iguales a ",n)
A este tipo de if es lo que se conoce con el nombre de if anidado
En el siguiente ejemplo vamos a crear un módulo con todo lo que hata ahora hemos visto.
Ejemplo 1
Formulación del problema:
Las ventas semanales de celulares de alta gama se encuentran registrados en el archivo cel2019.txt. Se desea obtener el Monto total de las ventas (vTotal), el Monto neto total (nTotal) de la ventas, el monto total de descuento (mDesc) y el monto total de IGV (tIGV), por semana. En el archivo se usa como separador la coma y tienen cabecera. El IGV es de 18%.
Para calcular el monto total de descuento (mDesc) se debe tomar en cuenta la siguiente tabla:
Tipo | Porcentaje(%) |
---|---|
|
|
|
|
|
|
Solución
Abra un nuevo archivo de módulos usando [File] - [New file]
Grabe este módulo con el nombre mymod06.py, usando la secuencia [File] - [Save as ...] en la unidad y carpeta deseada.
Ante todo vamos a importar pandas como pd para la lectura fácil de los datos
>>>import pandas as pd
Procedemos a leer el archivo que tiene cabecera y lo guardamos en la variable datos
>>>datos = pd.read_csv("d:\\pypage\\cel2019.txt",sep=",")
Visualizamos lo leído
>>>datos
Vamos a extraer las columnas hacia variable para manejarlas indepndiente del data.frame que es datos
>>> nprod = datos.prodName
>>> precio = datos.prUnit
>>> cantidad = datos.cant
>>> tipoD = datos.tDesc
Ahora procedemos al cálculo de los totales pedidos
Obtenemos en n, el número de ventas registarados
>>>n = len(nprod)
>>>print("Número de productos a procesar: ",n)
Ahora debemos determinar el porcentaje de descuento que le corresponde a los productos de la lista:
Usemos una nueva variable auxiliar para guardar los porcentajes de descuento: <b>pDesc</b>. Como los precios y cantidades son arreglos, pDesc también tiene que ser arreglo, por eso lo definimos previamente como tal:
>>>pDesc=[]
Aquí añadiremos (append) producto por producto el porcentaje que le corresponda (como decimal, 0, 0.05 y 0.12)
Si tipoD = 1 entonces añadimos 0 al arreglo pDesc usando pDesc.append(0)
Si no, preguntamos: Si tipoD = 2 entonces añadimos 0 al arreglo pDesc usando pDesc.append(0.05)
Y si no, entonces añadimos 0 al arreglo pDesc usando pDesc.append(0.12)
Esto significa que haremos uso de la setencia if en la modalidad: if ... elif ... else
Pero esto tiene que hacerlo para cada elemento de la lista donde hay 10 elementos. Para ello debemos usar la sentencia for ... que hasta ahora la venimos usando sin haberla presentado formalmente. He quí el código:
for i in range(n):
if tipoD[i] == 1:
< pDesc.append(0)
< elif tipoD[i] == 2:
pDesc.append(0.05)
else:
pDesc.append(0.12)
Podemos ver el resultado
>>>pDesc
Calculamos la venta bruta en vBruta (variable auxiliar)
>>>vBruta = precio*cantidad
La venta total
>>>vTotal = sum(vBruta)
Cálculo del monto del decuento, mDesc
>>>mDesc=sum(precio*cantidad*pDesc)
Cálculo del monto del IGV
>>>mIGV=sum(precio*cantidad*0.18)
Cálculo de la venta neta total, vNeta
>>>vNeta = sum(precio*cantidad-precio*cantidad*pDesc+precio*cantidad*0.18)
Pasamos a imprimir los resultados
>>>print("Resumen semanal:\n","Venta total: %24.2f"%vTotal,"\nTotal venta neta: %20.2f"%vNeta,"\nMonto total del descuento: %11.2f"%mDesc,"\nMonto del IGV: %23.2f"%mIGV)
Guarde el archivo usando: [File] - [Save] para guardar las modificaciones
Ahora pasamos a ejecutar el programa usando [Run] - [Run module ...]
Estos son los resultados que se obtienen:
Número de productos a procesar: 10
Resumen semanal:
Venta total: 223082.00
Total venta neta: 250877.52
Monto total del descuento: 12359.24
Monto del IGV: 40154.76
Continuar en la siguiente sesión