Creo que el tema está resuelto, pero me gustaría aportar algo que a todos les sirve, sobre todo cuando tienen que ‘traducir’ un problema desde un campo (la matemática, en este caso) a lo programático, y mucho más si estás aprendiendo a programar.
Es algo muy sencillo, usar strings multilinea para definir el problema:
"Esto es un string"
"""Esto
es
un
string
multilinea"""
Para el problema de Carlos sería:
"""
# Definición del problema
Realizar una función que reciba 2 parámetros, a y b,
si a es mayor que b, realizar la suma de los números
enteros de a hasta b incluidos,
si no se realiza la suma, retornar a.
# Constantes
None
# Variables
a, b
# Condiciones
a > b: devolver suma inclusiva de los números enteros de 'a' hasta 'b'
a <= b: devolver 'a'
"""
Una vez que definiste bien el problema y sus diferentes partes, recién ahí empezás a escribir código fuente. A veces el problema mismo está mal definido o poco claro, aprovecha para ponerlo en palabras que vos entiendas.
Si no sabés como resolverlo en Python, investigás. Si tenés dudas de cómo funciona o qué te devuelven las diferentes funciones nativas de Python, usá el intérprete para practicar.
Mi estilo particular, puede no ser el tuyo, es evitar en lo posible los términos abstractos como ‘a’ y ‘b’. Está perfecto para aprender matemática, ya que se trata de abstraer objetos concretos de la vida real para encontrar una solución general, pero en la vida real, un programador trata de encontrar una solución para un problema concreto, a menos que estés haciendo el doctorado en matemática. Usá para la definición cosas concretas como Megahertz, bulones o pelotas, dependiendo de el problema que tengas en frente.
Modificando un poco la definición quedaría algo como esto:
"""
# Definición del problema
Realizar una función que reciba 2 parámetros,
si el primero es mayor que el segundo,
realizar la suma de los números enteros desde el mayor
hasta el menor incluidos estos dos,
en caso contrario, devolver el primer parámetro.
# Variables
a=0, b=0, suma=0
# Condiciones
a > b: for i in range(b, a+1): suma += 1
a <= b: return a
"""
Fijate que:
- Mejoré la definición para mayor claridad
- Agregué variables adicionales que necesito
- Definí el mínimo código fuente que necesito para resolver la ecuación
- Todo lo anterior, tratando de usar en lo posible código Python válido. Un borrador más y el compilador no debería marcarte error.
En el caso específico de las funciones, es importante el valor por defecto que devuelve. Si vos definís una función vacía:
def sumar_naturales(a,b):
pass
Te devuelve None
. Muy útil si usas la salida de la función en un condicional, ya que funciona como un booleano. Podés checkearlo en el intérprete.
Otro tip útil es dar valores por defecto a los parámetros en lo posible:
def sumar_naturales(a=0,b=0):
return a
Fijate que:
- Para los nombres de las funciones, usá verbos, porque es un proceso, no un objeto
- En la definición no parece obvio, pero el valor de ‘a’ es el valor por defecto que devuelve la función
Sabiendo lo anterior, ya podés empezar a escribir directamente la función, descomentándo las lineas que usas de la definicion:
#! /usr/env python
"""
Realizar una función que reciba 2 parámetros,
si el primero es mayor que el segundo,
realizar la suma de los números enteros desde el mayor
hasta el menor incluidos estos dos,
en caso contrario, devolver el primer parámetro.
"""
def sumar_naturales(a=0,b=0):
suma=0
if a > b:
for i in range(b, a+1):
suma += 1
return suma
return a
print(sumar_naturales(9,7))
Fijate que:
- Devolviendo por defecto ‘a’, te ahorrás el ‘else’ en el condicional
- Por supuesto, tenés que usar un script para esto. La primer linea (Shebang) depende de tu plataforma