Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] ejercicio muy sencillo

Estas en el tema de ejercicio muy sencillo en el foro de Python en Foros del Web. sigo con mi aprendizaje y practicas.. :) #Crea tu función generateNumbers (inicio, final, paso) que toma en tres números como argumentos y devuelve una lista ...
  #1 (permalink)  
Antiguo 29/01/2013, 15:24
 
Fecha de Ingreso: julio-2003
Mensajes: 243
Antigüedad: 20 años, 9 meses
Puntos: 11
ejercicio muy sencillo

sigo con mi aprendizaje y practicas.. :)

#Crea tu función generateNumbers (inicio, final, paso) que toma en tres números como argumentos y devuelve una lista de números que van
#desde el principio hasta el número final(inclusive) y los números saltan basado en el paso específico de los argumentos.
#Nota: El rango de la función (x, y, z) se toma en 3 argumentos. Por ejemplo, el rango (1, 11, 2) devuelve una lista de números [1,3,5,7,9].

# >>> generateNumber(2, 10, 2)
# [2, 4, 6, 8, 10]
# >>> generateNumber(10, 10, 1)
# [10]
# >>> generateNumber(20, 0, -3)
# [20, 17, 14, 11, 8, 5, 2]

Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     lista=[]
  3.     for x in range (inicio,final,salto):
  4.         lista.append(x)
  5.     return lista


me tiene que dar estos resultados:

print (generateNumber(2,10,2))
>> [2, 4, 6, 8, 10]
print (generateNumber(20,0,-3))
>> [20, 17, 14, 11, 8, 5, 2]
print (generateNumber(15, 6, -2))
>> [15, 13, 11, 9, 7]


el problema esta en que generateNumber(2,10,2) me devuelve [2, 4, 6, 8, ]


entonces pensé le sumo uno al final en el ciclo for y funcionó

Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     lista=[]
  3.     for x in range (inicio,final+1,salto):
  4.         lista.append(x)
  5.     return lista

pero ahora la que falla es esta print (generateNumber(15, 6, -2)) que se queda así [15, 13, 11, 9]

se que es una tontería pero no se me ocurre como solucionarlo para que todos los resultados sean correctos :(

Saludos y mil Gracias!
  #2 (permalink)  
Antiguo 29/01/2013, 17:26
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: ejercicio muy sencillo

Que tal? Así es como lo haría yo, mi humilde aporte. Espero que te sirva!

Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     lista=[]
  3.     for x in range (inicio, (final + 1) if (salto > 0) else final, salto):
  4.         lista.append(x)
  5.     return lista
  6.    
  7. >>> print (generateNumber(15, 6, -2))
  8. [15, 13, 11, 9, 7]

  #3 (permalink)  
Antiguo 29/01/2013, 18:20
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: ejercicio muy sencillo

A ver si entendí el planteo, el problema se da cuando el salto es positivo o negativo ya que en ambos casos hay que resolver diferente.

Mi solución es:

Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     lista=[]
  3.     if salto > 0:
  4.         for x in range (inicio,final+1,salto):
  5.             lista.append(x)
  6.         return lista
  7.     else:
  8.         for x in range (inicio,final,salto):
  9.             lista.append(x)
  10.         return lista
  11.  
  12. print generateNumber(2,10,2)
  13. print generateNumber(10,10,1)
  14. print generateNumber(20,0,-3)
  15. print generateNumber(15,6,-2)
  #4 (permalink)  
Antiguo 29/01/2013, 18:21
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: ejercicio muy sencillo

Cita:
Iniciado por carbon Ver Mensaje
Que tal? Así es como lo haría yo, mi humilde aporte. Espero que te sirva!

Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     lista=[]
  3.     for x in range (inicio, (final + 1) if (salto > 0) else final, salto):
  4.         lista.append(x)
  5.     return lista
  6.    
  7. >>> print (generateNumber(15, 6, -2))
  8. [15, 13, 11, 9, 7]

Hola Carbon, cuando escribí mi respuesta la tuya todavía no estaba... se ve que trabajamos los dos al mismo tiempo.

Yo lo resolví con un IF, pero su solución es más limpia. Más "Pythoniana" supongo.
  #5 (permalink)  
Antiguo 29/01/2013, 18:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ejercicio muy sencillo

También pongo mi granito de arena con mi solución.

Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     return range(inicio, final + (salto > 0), salto)

Edito: Para python 3.x
Código Python:
Ver original
  1. def generateNumber(inicio,final,salto):
  2.     return list(range(inicio, final + (salto > 0), salto))
  #6 (permalink)  
Antiguo 29/01/2013, 21:00
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: ejercicio muy sencillo

Cita:
Iniciado por tecafede Ver Mensaje
Hola Carbon, cuando escribí mi respuesta la tuya todavía no estaba... se ve que trabajamos los dos al mismo tiempo.

Yo lo resolví con un IF, pero su solución es más limpia. Más "Pythoniana" supongo.
No hay problema!

Creo que la solución de razpeitia es la más pythonica, Jaja
  #7 (permalink)  
Antiguo 30/01/2013, 05:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: ejercicio muy sencillo

Cita:
Iniciado por carbon Ver Mensaje
No hay problema!

Creo que la solución de razpeitia es la más pythonica, Jaja
Y SI !!!

El que sabe sabe, y el que no... escribe más código ja ja ja ja ja ja
  #8 (permalink)  
Antiguo 30/01/2013, 09:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ejercicio muy sencillo

Bonus:

Resuelvan el caso donde inicio = -5, fin = -10, salto = -1

Código Python:
Ver original
  1. def generateNumber(inicio, final, salto):
  2.     return range(inicio, final + (salto > 0), salto)
  3.  
  4. if __name__ == '__main__':
  5.     assert generateNumber(2,10,2) == [2, 4, 6, 8, 10]
  6.     assert generateNumber(20,0,-3) == [20, 17, 14, 11, 8, 5, 2]
  7.     assert generateNumber(15, 6, -2) == [15, 13, 11, 9, 7]
  8.     assert generateNumber(-10, -5, 1) == [-10, -9, -8, -7, -6, -5]
  9.     assert generateNumber(-5, -10, -1) == [-5, -6, -7, -8, -9, -10]
  #9 (permalink)  
Antiguo 30/01/2013, 18:46
 
Fecha de Ingreso: julio-2003
Mensajes: 243
Antigüedad: 20 años, 9 meses
Puntos: 11
Respuesta: ejercicio muy sencillo

Muchas gracias!!! la verdad es que la programación en un 90% es ser ingenioso, espero pronto mi cerebro empiece a tener mejores ideas en este tipo de "tonterías" jeje

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:25.