Volvemos al problema que nos plantearon: Debemos leer un número y, si el número es positivo, debemos escribir en pantalla el mensaje "Numero positivo"
.
Utilizando la instrucción if
que acabamos de introducir y que sirve para tomar decisiones simples. Dijimos que su formato más sencillo es:
if <condición>: <hacer algo si se da la condición>
cuyo significado es el siguiente: se evalúa <condición>
y si el resultado es True
(verdadero) se ejecutan las acciones indicadas como <hacer algo si se da la condición>
.
Como ahora ya sabemos también cómo construir condiciones de comparación, estamos en condiciones de implementar nuestra solución. Escribimos la función es_positivo()
que hace lo pedido:
def es_positivo():
x = input("Ingrese un numero: ")
if x > 0:
print "Numero positivo"
y la probamos:
>>> es_positivo()
Ingrese un numero: 4
Numero positivo
>>> es_positivo()
Ingrese un numero: -25
>>> es_positivo()
Ingrese un numero: 0
>>>
Problema 4.2. En la etapa de mantenimiento nos dicen que, en realidad, también se necesitaría un mensaje "Numero no positivo"
cuando no se cumple la condición.
Modificamos la especificación consistentemente y modificamos el diseño:
- Solicitar al usuario un número, guardarlo en
x
. - Si
x > 0
, imprimir"Numero positivo"
- Si no se cumple
x > 0
, imprimir"Numero no positivo"
La negación de x > 0
es ¬(x > 0)
que se traduce en Python como not (x > 0)
, por lo que implementamos nuestra solución en Python como:
def positivo_o_no():
x = input("Ingrese un numero: ")
if x > 0:
print "Numero positivo"
if not (x > 0):
print "Numero no positivo"
Probamos la nueva solución y obtenemos el resultado buscado:
>>> positivo_o_no()
Ingrese un numero: 4
Numero positivo
>>> positivo_o_no()
Ingrese un numero: -25
Numero no positivo
>>> positivo_o_no()
Ingrese un numero: 0
Numero no positivo
>>>
Sin embargo hay algo que nos preocupa: si ya averiguamos una vez, en la segunda línea del cuerpo, si x > 0
, ¿Es realmente necesario volver a preguntarlo en la cuarta?.
Existe una construcción alternativa para la estructura de decisión:
Si se da la condición C, hacer S, de lo contrario, hacer T. Esta estructura tiene la forma:
if <condición>: <hacer algo si se da la condición> else: <hacer otra cosa si no se da la condición>
Donde if
y else
son palabras reservadas. Su significado es el siguiente: se evalúa <condición>
, si el resultado es True
(verdadero) se ejecutan las acciones indicadas como <hacer algo si se da la condición>
, y si el resultado es False
(falso) se ejecutan las acciones indicadas como <hacer otra cosa si no se da la condición>
.
Volvemos a nuestro diseño:
- Solicitar al usuario un número, guardarlo en
x
. - Si
x > 0
, imprimir"Numero positivo"
- De lo contrario, imprimir
"Numero no positivo"
Este diseño se implementa como:
def positivo_o_no_nue():
x = input("Ingrese un numero: ")
if x > 0:
print "Numero positivo"
else:
print "Numero no positivo"
y lo probamos:
>>> positivo_o_no_nue()
Ingrese un numero: 4
Numero positivo
>>> positivo_o_no_nue()
Ingrese un numero: -25
Numero no positivo
>>> positivo_o_no_nue()
Ingrese un numero: 0
Numero no positivo
>>>
Es importante destacar que, en general, negar la condición del if
y poner else
no son intercambiables, no necesariamente producen el mismo efecto en el programa. Notar qué sucede en los dos programas que se transcriben a continuación. ¿Por qué se dan estos resultados?:
Programa 1
>>> def pn():
... x = input("Ingrese un numero: ")
... if x > 0:
... print "Numero positivo"
... x = -x
... if x < 0:
... print "Numero no positivo"
...
>>> pn()
Ingrese un numero: 25
Numero positivo
Numero no positivo
>>>
Programa 2
>>> def pn1():
... x = input("Ingrese un numero: ")
... if x > 0:
... print "Numero positivo"
... x = -x
... else:
... print "Numero no positivo"
...
>>> pn1()
Ingrese un numero: 25
Numero positivo
>>>