Foros del Web » Programando para Internet » Python »

Ayuda con sentencias condicionales

Estas en el tema de Ayuda con sentencias condicionales en el foro de Python en Foros del Web. Hola compañeros del foro, soy yo de nuevo, esta ves me ha tocado hacer un problema bastante complicado, lo resolvi pero tengo dudas, para mi ...
  #1 (permalink)  
Antiguo 03/09/2010, 15:25
 
Fecha de Ingreso: abril-2010
Mensajes: 19
Antigüedad: 14 años
Puntos: 0
Sonrisa Ayuda con sentencias condicionales

Hola compañeros del foro, soy yo de nuevo, esta ves me ha tocado hacer un problema bastante complicado, lo resolvi pero tengo dudas, para mi que funciona medio mal, me PODRIAN dar una mano?.. ahi les paso el programa que yo hice.

ACLARACION: la variable "amos" significa años, pero la puse asi porque python me tira error si la pongo asi.

PROGRAMA:

La formula (67) C0 = C · (1 + x/100)**n nos permite obtener el capital final que lograremos a partir de un capital inicial (C), una tasa de interes anual (x) en tanto por cien y un numero de años (n). Si lo que nos interesa conocer es el numero de años n que tardaremos en lograr un capital final C0 partiendo de un capital inicial C a una tasa de interes anual x, podemos despejar n en la formula del ejercicio 67 de la siguiente manera:

n = log(C0) − log(C) / log(1 + x/100)

Diseña un programa Python que obtenga el numero de años que se tarda en conseguir un capital final dado a partir de un capital inicial y una tasa de interes anual tambien dados. El programa debe tener en cuenta cuando se puede realizar el calculo y cuando no en funcion del valor de la tasa de interes (para evitar una division por cero, el calculo de logaritmos de valores negativos, etc). . . con una excepcion: si C y C0 son iguales, el numero de años es 0 independientemente de la tasa de interes (incluso de la que provocarıa un error de division por cero).
(Ejemplos: Para obtener 11 000 por una inversion de 10 000 al 5% anual es necesario esperar 1.9535 a˜nos. Obtener 11 000 por una inversion de 10 000 al 0% anual es imposible.
Para obtener 10 000 ¤ con una inversion de 10 000 no hay que esperar nada, sea cual sea el interes.)

ESTE ES EL PROBLEMA COMO LO PENSE YO:

from math import log

C = float(raw_input("Dame un capial inicial: "))
tasa = float(raw_input("Dame la tasa de interes anual: "))

if tasa <= 0:
print "No se puede realizar el calculo ya que la tasa es menor o igual a 0"
else:
if tasa > 0:
amos = (log((C*(1+tasa/100))) - log(C)) / (log(1+tasa/100))
CapitalFinal = (C * (1+tasa/100)**amos)
if CapitalFinal != 0:
print "Para obtener %3.2f por una inversion de %3.2f al %3.2f por ciento anual" % (CapitalFinal, C, tasa)
print "es necesario esperar %1.3f años" % (amos)
else:
amos = 0

me suena que algo tengo mal, pero no me doy cuenta que es... si me podrian ayudar a darme cuenta se los agradaceria mucho :)
Desde ya muchas gracias....
  #2 (permalink)  
Antiguo 03/09/2010, 20:57
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: Ayuda con sentencias condicionales

Te daré algunos hints:
1.- Usa excepciones ; )
2.- Prueba el caso donde el capital final es igual al inicial y la tasa es 0
3.- Lee bien tus problemas, te van a dar capital final, capital inicial y una tasa. Calcula los años.

Bonus:
Te diré como validar que tu entrada sea un numero:
Código Python:
Ver original
  1. while True:
  2.     try:
  3.         float(raw_input("Dame un numero: "))
  4.     except ValueError:
  5.         print "Eso no es un numero"
  6.     else:
  7.         break
  #3 (permalink)  
Antiguo 06/09/2010, 07:37
 
Fecha de Ingreso: abril-2010
Mensajes: 19
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda con sentencias condicionales

Gracias che, esta buena tu deduccion, me sirvio mucho, te lo agradesco :)

Etiquetas: condicionales, sentencias
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 03:40.