Sentencia condicional if

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.

Operadores lógicos de comparación de expresionA y expresionB
Operador
Uso
Significado
==
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:

Tipos de decuento
Tipo Porcentaje(%)
1
0
2
5
3
12

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