Estándar de código con condicionales e implicaciones

Sentencias condicionales: if
La estructura de control if ... permite que un programa ejecute unas instrucciones cuando se cumplan una condición. En inglés "if" significa "si" (condición).
La sintaxis de la construcción if es la siguiente:
if condición:
aquí van las órdenes que se ejecutan si la condición es cierta
y pueden ocupar varias líneas
La ejecución de esta construcción es la siguiente:
La condición se evalúa siempre.
Si el resultado es True se ejecuta el bloque de sentencias
Si el resultado es False no se ejecuta el bloque de sentencias.
La primera línea contiene la condición a evaluar y es una expresión lógica. Esta línea debe terminar siempre por dos puntos (:).
A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera).
Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones.
Al escribir dos puntos (:) al final de una línea, el editor sangrará automáticamente las líneas siguientes.
Para terminar un bloque, basta con volver al principio de la línea.
Diagrama de flujo de la sentencia condicional condicional if

El programa siguiente pide un número positivos al usuario y almacena la respuesta en la variable "numero". Después comprueba si el número es negativo. Si lo es, el programa avisa que no era eso lo que se había pedido. Finalmente, el programa imprime siempre el valor introducido por el usuario

Bifurcación: else
La estructura de control if ... else ... permite que un programa ejecute unas instrucciones cuando se cumple una condición y otras instrucciones cuando no se cumple esa condición. En inglés "if" significa "si" (condición) y "else" significa "si no".
La sintaxis de la construcción if ... else ... es la siguiente:
if condición:
aquí van las órdenes que se ejecutan si la condición es cierta
y que pueden ocupar varias líneas
else:
y aquí van las órdenes que se ejecutan si la condición es
falsa y que también pueden ocupar varias líneas
La ejecución de esta construcción es la siguiente:
La condición se evalúa siempre.
Si el resultado es True se ejecuta solamente el bloque de sentencias 1
Si el resultado es False se ejecuta solamente el bloque de sentencias 2.
La primera línea contiene la condición a evaluar. Esta línea debe terminar siempre por dos puntos (:).
A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera).
Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones.
El sangrado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios.
Al escribir dos puntos (:) al final de una línea, IDLE sangrará automáticamente las líneas siguientes.
Para terminar un bloque, basta con volver al principio de la línea.
Después viene la línea con la orden else, que indica a Python que el bloque que viene a continuación se tiene que ejecutar cuando la condición no se cumpla (es decir, cuando sea falsa).
Esta línea también debe terminar siempre por dos puntos (:). La línea con la orden else no debe incluir nada más que el else y los dos puntos.
En último lugar está el bloque de instrucciones sangrado que corresponde al else.
Diagrama de flujo de la sentencia condicional if ... else ...

El programa siguiente pregunta la edad al usuario y almacena la respuesta en la variable "edad". Después comprueba si la edad es inferior a 18 años. Si esta comparación es cierta, el programa escribe que es menor de edad y si es falsa escribe que es mayor de edad. Finalmente el programa siempre se despide, ya que la última instrucción está fuera de cualquier bloque y por tanto se ejecuta siempre

Aunque no es aconsejable, en vez de un bloque if ... else ... se podría escribir un programa con dos bloques if ...
edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
print("Es usted menor de edad")
if edad >= 18:
print("Es usted mayor de edad")
print("¡Hasta la próxima!")
Es mejor no hacerlo así por varios motivos:
Al poner dos bloques if estamos obligando a Python a evaluar siempre las dos condiciones, mientras que en un bloque if ... else ... sólo se evalúa una condición. En un programa sencillo la diferencia no es apreciable, pero en programas que ejecutan muchas comparaciones, el impacto puede ser apreciable.
Utilizando else nos ahorramos escribir una condición (además, escribiendo la condición inicial nos podemos equivocar, pero escribiendo else no).
Utilizando if ... else nos aseguramos de que se ejecuta uno de los dos bloques de instrucciones. Utilizando dos if cabría la posibilidad de que no se cumpliera ninguna de las dos condiciones y no se ejecutara ninguno de los dos bloques de instrucciones.
Si por algún motivo no se quisiera ejecutar ninguna orden en alguno de los bloques, el bloque de órdenes debe contener al menos la instrucción pass (esta orden le dice a Python que no tiene que hacer nada).
edad = int(input("¿Cuántos años tiene? "))
if edad < 120:
pass
else:
print("¡No me lo creo!")
print(f"Usted dice que tiene {edad} años.")
Evidentemente este programa podría simplificarse cambiando la desigualdad.
edad = int(input("¿Cuántos años tiene? "))
if edad >= 120:
print("¡No me lo creo!")
print(f"Usted dice que tiene {edad} años.")
El primer ejemplo era sólo un ejemplo para mostrar cómo se utiliza la instrucción pass. Normalmente, la instrucción pass se utiliza para "rellenar" un bloque de instrucciones que todavía no hemos escrito y poder ejecutar el programa, ya que Python requiere que se escriba alguna instrucción en cualquier bloque.
Sangrado de los bloques
Un bloque de instrucciones puede contener varias instrucciones. Todas las instrucciones del bloque deben tener el mismo sangrado:
edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
print("Es usted menor de edad")
print("Recuerde que está en la edad de aprender")
else:
print("Es usted mayor de edad")
print("Recuerde que debe seguir aprendiendo")
print("¡Hasta la próxima!")
Se aconseja utilizar siempre el mismo número de espacios en el sangrado, aunque Python permite que cada bloque tenga un número distinto. Por lo que el siguiente programa es correcto pero no recomendable:
edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
print("Es usted menor de edad")
print("Recuerde que está en la edad de aprender")
else:
print("Es usted mayor de edad")
print("Recuerde que debe seguir aprendiendo")
print("¡Hasta la próxima!")
Lo que no se permite es que en un mismo bloque haya instrucciones con distintos sangrados. Dependiendo del orden de los sangrados, el mensaje de error al intentar ejecutar el programa será diferente:
En este primer caso, la primera instrucción determina el sangrado de ese bloque, por lo que al encontrar la segunda instrucción, con un sangrado mayor, se produce el error "unexpected indent" (sangrado inesperado).

En este segundo caso, la primera instrucción determina el sangrado de ese bloque, por lo que al encontrar la segunda instrucción, con un sangrado menor, Python entiende que esa instrucción pertenece a otro bloque, pero como no hay ningún bloque con ese nivel de sangrado, se produce el error "unindent does not match any outer indentation level" (el sangrado no coincide con el de ningún nivel superior).

En este tercer caso, como la segunda instrucción no tiene sangrado, Python entiende que la bifurcación if ha terminado, por lo que al encontrar un else sin su if correspondiente se produce el error "invalid syntax" (sintaxis no válida).
