<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mundo Geek &#187; condicionales</title>
	<atom:link href="http://mundogeek.net/etiqueta/condicionales/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Python: Control de flujo</title>
		<link>http://mundogeek.net/archivos/2008/01/29/python-control-de-flujo/</link>
		<comments>http://mundogeek.net/archivos/2008/01/29/python-control-de-flujo/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 15:38:58 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bucles]]></category>
		<category><![CDATA[condicionales]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/01/29/python-control-de-flujo/</guid>
		<description><![CDATA[En esta lección vamos a ver los condicionales y los bucles. Sentencias condicionales Si un programa no fuera más que una lista de órdenes a ejecutar de forma secuencial, una por una, no tendría mucha utilidad. Los condicionales nos permiten comprobar condiciones y hacer que nuestro programa se comporte de una forma u otra, que [...]]]></description>
			<content:encoded><![CDATA[<p>En esta lección vamos a ver los condicionales y los bucles.</p>
<h2>Sentencias condicionales</h2>
<p>Si un programa no fuera más que una lista de órdenes a ejecutar de forma secuencial, una por una, no tendría mucha utilidad. Los condicionales nos permiten comprobar condiciones y hacer que nuestro programa se comporte de una forma u otra, que ejecute un fragmento de código u otro, dependiendo de esta condición.</p>
<p>Aquí es donde cobran su importancia el tipo booleano y los operadores lógicos y relacionales que aprendimos en <a href="http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/">Python: tipos básicos</a>.<br />
<span id="more-1362"></span></p>
<h3>if</h3>
<p>La forma más simple de un estamento condicional es un if (del inglés si) seguido de la condición a evaluar, dos puntos (:) y en la siguiente línea e indentado, el código a ejecutar en caso de que se cumpla dicha condición.</p>
<pre class="code">fav = <span class="Normal">&quot;</span><span class="String">mundogeek.net</span><span class="Normal">&quot;</span>
<span class="pythonComment"># si (if) fav es igual a &quot;mundogeek.net&quot;</span>
<span class="pythonConditional">if</span> fav == <span class="Normal">&quot;</span><span class="String">mundogeek.net</span><span class="Normal">&quot;</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">¡Tienes buen gusto!</span><span class="Normal">&quot;</span>
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Gracias</span><span class="Normal">&quot;</span></pre>
<p>Como veis es bastante sencillo.</p>
<p>Eso si, aseguraros de que indentáis el código tal cual se ha hecho en el ejemplo, es decir, aseguraros de pulsar Tabulación antes de las dos órdenes print, dado que esta es la forma de Python de saber que vuestra intención es la de que se los dos print se ejecuten sólo en el caso de que se cumpla la condición, y no la de que se imprima la primera cadena si se cumple la condición y la otra siempre, cosa que se expresaría así:</p>
<pre class="code"><span class="pythonConditional">if</span> fav == <span class="Normal">&quot;</span><span class="String">mundogeek.net</span><span class="Normal">&quot;</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">¡Tienes buen gusto!</span><span class="Normal">&quot;</span>
<span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Gracias</span><span class="Normal">&quot;</span></pre>
<p>En otros lenguajes de programación los bloques de código se determinan encerrándolos entre llaves, y el indentarlos no se trata más que de una buena práctica para que sea más sencillo seguir el flujo del programa con un solo golpe de vista. Por ejemplo, el código anterior expresado en Java sería algo así:</p>
<pre class="code">
String fav = "mundogeek.net";
if (fav.equals("mundogeek.net"){
    System.out.println("¡Tienes buen gusto!");
    System.out.println("Gracias");
}</pre>
<p>Sin embargo como ya hemos comentado, en Python se trata de una obligación, y no de una elección. De esta forma se obliga a los programadores a indentar su código para que sea más sencillo de leer <img src='http://mundogeek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>if &#8230; else</h3>
<p>Vamos a ver ahora un condicional algo más complicado. ¿Qué haríamos si quisiéramos que se ejecutaran unas ciertas órdenes en el caso de que la condición no se cumpliera? Sin duda podríamos añadir otro if que tuviera como condición la negación del primero:</p>
<pre class="code"><span class="pythonConditional">if</span> fav == <span class="Normal">&quot;</span><span class="String">mundogeek.net</span><span class="Normal">&quot;</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">¡Tienes buen gusto!</span><span class="Normal">&quot;</span>
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Gracias</span><span class="Normal">&quot;</span>

<span class="pythonConditional">if</span> fav != <span class="Normal">&quot;</span><span class="String">mundogeek.net</span><span class="Normal">&quot;</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Vaya, que lástima</span><span class="Normal">&quot;</span></pre>
<p>pero el condicional tiene una segunda construcción mucho más útil:</p>
<pre class="code"><span class="pythonConditional">if</span> fav == <span class="Normal">&quot;</span><span class="String">mundogeek.net</span><span class="Normal">&quot;</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">¡Tienes buen gusto!</span><span class="Normal">&quot;</span>
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Gracias</span><span class="Normal">&quot;</span>
<span class="pythonConditional">else</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Vaya, que lástima</span><span class="Normal">&quot;</span></pre>
<p>Vemos que la segunda condición se puede sustituir con un else (del inglés: si no, en caso contrario). Si leemos el código vemos que tiene bastante sentido: &#8220;si fav es igual a mundogeek.net, imprime esto y esto, si no, imprime esto otro&#8221;.</p>
<h3>if &#8230; elif &#8230; elif &#8230; else</h3>
<p>Todavía queda una construcción más que ver, que es la que hace uso del elif.</p>
<pre class="code"><span class="pythonConditional">if</span> numero &lt; 0:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Negativo</span><span class="Normal">&quot;</span>
<span class="pythonConditional">elif</span> numero &gt; 0:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Positivo</span><span class="Normal">&quot;</span>
<span class="pythonConditional">else</span>:
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Cero</span><span class="Normal">&quot;</span></pre>
<p>elif es una contracción de &#8220;else if&#8221;, por lo tanto <code>elif numero &gt; 0</code> puede leerse como &#8220;si no, si numero es mayor que 0&#8243;. Es decir, primero se evalúa la condición del if. Si es cierta, se ejecuta su código y se continúa ejecutando el código posterior al condicional; si no se cumple, se evalúa la condición del elif. Si se cumple la condición del elif se ejecuta su código y se continua ejecutando el código posterior al condicional; si no se cumple y hay más elifs se continúa con el siguiente elif en orden de aparición. Si no se cumple la condición del if ni de ninguno de los elif, se ejecuta el código del else.</p>
<h3>A if C else B</h3>
<p>También existe una construcción similar al operador &#8216;?&#8217; de otros lenguajes, que no es más que una forma compacta de expresar un if else. En esta construcción se evalúa el predicado C y se devuelve A si se cumple o B si no se cumple. Tendría este aspecto:</p>
<pre class="code">var = <span class="Normal">&quot;</span><span class="String">par</span><span class="Normal">&quot;</span> <span class="pythonConditional">if</span> (num % 2 == 0) <span class="pythonConditional">else</span> <span class="Normal">&quot;</span><span class="String">impar</span><span class="Normal">&quot;</span></pre>
<p>Y eso es todo. Si conocéis otros lenguajes de programación puede que esperarais que os hablara ahora del switch, pero en Python no existe esta construcción, que podría emularse con un simple diccionario, así que pasemos directamente a los bucles.</p>
<h2>Bucles</h2>
<p>Mientras que los condicionales nos permiten ejecutar distintos fragmentos de código dependiendo de ciertas condiciones, los bucles nos permiten ejecutar un mismo fragmento de código un cierto número de veces, mientras se cumpla una determinada condición.</p>
<h3>while</h3>
<p>El bucle while (mientras) ejecuta un fragmento de código <strong>mientras</strong> se cumpla una condición.</p>
<pre class="code">edad = 0
<span class="pythonRepeat">while</span> edad &lt; 18:
    edad = edad + 1
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Felicidades, tienes </span><span class="Normal">&quot;</span> + str(edad)</pre>
<p>La variable edad comienza valiendo 0. Como la condición de que edad es menor que 18 es cierta (0 es menor que 18), se entra en el bucle. Se aumenta edad en 1 y se imprime el mensaje informando de que el usuario ha cumplido un año. Recordad que el operador &#8216;+&#8217; para las cadenas funciona concatenando ambas cadenas. Es necesario utilizar la función str (de string, cadena) para crear una cadena a partir del número, dado que no podemos concatenar números y cadenas, pero ya comentaremos esto y mucho más en próximas lecciones.</p>
<p>Ahora se vuelve a evaluar la condición, y 1 sigue siendo menor que 18, por lo que se vuelve a ejecutar el código que aumenta la edad en un año e imprime la edad en la pantalla. El bucle continuará ejecutándose hasta que edad sea igual a 18, momento en el cual la condición dejará de cumplirse y el programa continuaría ejecutando las instrucciones siguientes al bucle.</p>
<p>Ahora imaginemos que se nos olvidara escribir la instrucción que aumenta la edad. En ese caso nunca se llegaría a la condición de que edad fuese igual o mayor que 18, siempre sería 0, y el bucle continuaría indefinidamente escribiendo en pantalla &#8220;Has cumplido 0&#8243;.</p>
<p>Esto es lo que se conoce como un bucle infinito.</p>
<p>Sin embargo hay situaciones en las que un bucle infinito es útil. Por ejemplo, veamos un pequeño programa que repite todo lo que el usuario diga hasta que escriba &#8220;adios&#8221;.</p>
<pre class="code"><span class="pythonRepeat">while</span> True:
    entrada = raw_input(<span class="Normal">&quot;</span><span class="String">&gt; </span><span class="Normal">&quot;</span>)
    <span class="pythonConditional">if</span> entrada == <span class="Normal">&quot;</span><span class="String">adios</span><span class="Normal">&quot;</span>:
        <span class="pythonStatement">break</span>
    <span class="pythonConditional">else</span>:
        <span class="pythonStatement">print</span> entrada</pre>
<p>Para obtener lo que el usuario escriba en pantalla utilizamos la función raw_input. No es necesario que sepais qué es una función ni cómo funciona exactamente, simplemente aceptad por ahora que en cada iteración del bucle la variable entrada contendrá lo que el usuario escribió hasta pulsar Enter.</p>
<p>Comprobamos entonces si lo que escribió el usuario fue &#8220;adios&#8221;, en cuyo caso se ejecuta la orden <code>break</code> o si era cualquier otra cosa, en cuyo caso se imprime en pantalla lo que el usuario escribió.</p>
<p>La palabra clave break (romper) sale del bucle en el que estamos.</p>
<p>Este bucle se podría haber escrito también, no obstante, de la siguiente forma:</p>
<pre class="code">salir = False
<span class="pythonRepeat">while</span> <span class="pythonOperator">not</span> salir:
    entrada = raw_input()
    <span class="pythonConditional">if</span> entrada == <span class="Normal">&quot;</span><span class="String">adios</span><span class="Normal">&quot;</span>:
        salir = True
    <span class="pythonConditional">else</span>:
        <span class="pythonStatement">print</span> entrada</pre>
<p>pero nos ha servido para ver cómo funciona break.</p>
<p>Otra palabra clave que nos podemos encontrar dentro de los bucles es continue (continuar). Como habréis adivinado no hace otra cosa que pasar directamente a la siguiente iteración del bucle.</p>
<pre class="code">edad = 0
<span class="pythonRepeat">while</span> edad &lt; 18:
    edad = edad + 1
    <span class="pythonConditional">if</span> edad % 2 == 0:
        <span class="pythonStatement">continue</span>
    <span class="pythonStatement">print</span> <span class="Normal">&quot;</span><span class="String">Felicidades, tienes </span><span class="Normal">&quot;</span> + str(edad)</pre>
<p>Como veis esta es una pequeña modificación de nuestro programa de felicitaciones. En esta ocasión hemos añadido un if que comprueba si la edad es par, en cuyo caso saltamos a la próxima iteración en lugar de imprimir el mensaje. Es decir, con esta modificación el programa sólo imprimiría felicitaciones cuando la edad fuera impar.</p>
<h3>for &#8230; in</h3>
<p>A los que hayáis tenido experiencia previa con según que lenguajes este bucle os va a sorprender gratamente. En Python for se utiliza como una forma genérica de iterar sobre una secuencia. Y como tal intenta facilitar su uso para este fin.</p>
<p>Este es el aspecto de un bucle for en Python:</p>
<pre class="code">secuencia = [<span class="Normal">&quot;</span><span class="String">uno</span><span class="Normal">&quot;</span>, <span class="Normal">&quot;</span><span class="String">dos</span><span class="Normal">&quot;</span>, <span class="Normal">&quot;</span><span class="String">tres</span><span class="Normal">&quot;</span>]
<span class="pythonRepeat">for</span> elemento <span class="pythonOperator">in</span> secuencia:
    <span class="pythonStatement">print</span> elemento</pre>
<p>Como hemos dicho los for se utilizan en Python para recorrer secuencias, por lo que vamos a utilizar un tipo secuencia, como es la lista, para nuestro ejemplo.</p>
<p>Leamos la cabecera del bucle como si de lenguaje natural se tratara: &#8220;para cada elemento en secuencia&#8221;. Y esto es exactamente lo que hace el bucle: para cada elemento que tengamos en la secuencia ejecuta estas líneas de código.</p>
<p>Lo que hace la cabecera del bucle es obtener el siguiente elemento de la secuencia <em>secuencia</em> y almacenarlo en una variable de nombre <em>elemento</em>. Por esta razón en la primera iteración del bucle elemento valdrá &#8220;uno&#8221;, en la segunda &#8220;dos&#8221;, y en la tercera &#8220;tres&#8221;.</p>
<p>Fácil y sencillo.</p>
<p>En C o C++, por ejemplo, lo que habríamos hecho sería iterar sobre las posiciones, y no sobre los elementos:</p>
<pre class="code">int mi_array[] = {1, 2, 3, 4, 5};
int i;
for(i = 0; i < 5; i++) {
    printf("%d\n", mi_array[i]);
}</pre>
<p>Es decir, tendríamos un bucle for que fuera aumentando una variable i en cada iteración, desde 0 al tamaño de la secuencia, y utilizaríamos esta variable a modo de índice para obtener cada elemento e imprimirlo.</p>
<p>Como veis el enfoque de Python es más natural e intuitivo.</p>
<p>Pero, ¿qué ocurre si quisiéramos utilizar el for como si estuviéramos en C o en Java, por ejemplo, para imprimir los números de 30 a 50? No os preocupéis, porque no necesitaríais crear una lista y añadir uno a uno los números del 30 al 50. Python proporciona una función llamada range (rango) que permite generar una lista que vaya desde el primer número que le indiquemos al segundo. Lo veremos después de ver al fin a qué se refiere ese término tan recurrente: las funciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/01/29/python-control-de-flujo/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Javascript: Control de Flujo</title>
		<link>http://mundogeek.net/archivos/2004/07/22/javascript-control-de-flujo/</link>
		<comments>http://mundogeek.net/archivos/2004/07/22/javascript-control-de-flujo/#comments</comments>
		<pubDate>Thu, 22 Jul 2004 23:41:05 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bucles]]></category>
		<category><![CDATA[condicionales]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://zootropo.f2o.org/archivos/2004/07/22/javascript-control-de-flujo/</guid>
		<description><![CDATA[Condicionales if (condicion) { expr1; } else { expr2; } En el caso de que condición sea cierto se evalua expr1, en caso contrario expr2. switch (expresion){ case valor1 : expr1; break; case valor2 : expr2; break; ... default : exprN; } Si expresión evalua a valor1 se ejecuta expr1, si evalua a valor2 se [...]]]></description>
			<content:encoded><![CDATA[<h2>Condicionales</h2>
<pre name="code" class="javascript">if (condicion) {
  expr1;
} else {
  expr2;
}</pre>
<p>En el caso de que condición sea cierto se evalua expr1, en caso contrario expr2.</p>
<pre name="code" class="javascript">switch (expresion){
  case valor1 :
    expr1;
    break;
  case valor2 :
    expr2;
    break;
  ...
  default : exprN;
}</pre>
<p>Si expresión evalua a valor1 se ejecuta expr1, si evalua a valor2 se evalua expr2,&#8230; <code>default</code> se ejecuta si no evalúa a ninguno de los demás. <code>break</code> hace que salgamos del <code>switch</code>, es similar en su uso a Java o C++. También podemos utilizar el <code>continue</code> de Java en los bucles para pasar a la siguiente iteración.</p>
<h2>Bucles</h2>
<pre name="code" class="javascript">for (inicializacion; condicion; incremento) {
  exprs
}</pre>
<p>Al empezar el bucle se ejecuta la expresión definida en inicializacion (normalmente la definición de una variable que será el índice del bucle). Mientras se cumpla condicion se evalúan las expresiones exprs y al final de cada iteración del bucle se ejecuta incremento.</p>
<pre name="code" class="javascript">while (condicion) {
  exprs
}</pre>
<p>Mientras condicion sea cierta se evalúan las expresiones exprs.</p>
<pre name="code" class="javascript">do {
  exprs
} while (condicion);</pre>
<p>Similar a while pero como la condición se comprueba al final del bucle exprs siempre se ejecutarán al menos una vez.</p>
<pre name="code" class="javascript">for (variable in objeto) {
  exprs
}</pre>
<p>En cada paso del bucle se asigna como valor a variable la siguiente propiedad de objeto. Por ejemplo si objeto fuera una matriz con los días de la semana variable valdría primero lunes, luego martes,&#8230; Es similar al for-in de Perl.</p>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushJScript.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh//flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2004/07/22/javascript-control-de-flujo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

