Algoritmos de Programación con Python

4.2. Comparaciones simples

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:

  1. Solicitar al usuario un número, guardarlo en x.
  2. Si x > 0, imprimir "Numero positivo"
  3. 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:

  1. Solicitar al usuario un número, guardarlo en x.
  2. Si x > 0, imprimir "Numero positivo"
  3. 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
>>>

Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano, Nicolás Paez. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.