• ¿Me ayudáis?

 #447956  por ikroox
 07 Jul 2014, 14:23
Hola gente, bueno, llevo leyendo el foro desde que me registre hará ya un tiempo (no mucho --') pero nunca me atreví a postear nada porque la verdad es que no tengo ni idea casi de nah. Ahora he empezado con phyton, y estaba haciendo una calculadora de arias básicas (la del rectángulo, cuadrado...) y la verdad es que me esta dando un error que no entiendo la verdad:
Código: [ Debe registrarse para ver este enlace ]
    area_trapecio = (b_may_trapecio * b_men_trapecio) * altura_trapecio / 2
                ^
SyntaxError: invalid syntax
Si alguien me puede ayudar ^^'

Os dejo el código entero (se que hay partes muuuy estúpidas y que sobran, pero he ido tomando ideas de unos cuantos vídeos que he visto... n.n)
Código: [ Debe registrarse para ver este enlace ]
# -*- coding: utf-8 -*-
print ("##################################")
print ("#### Calculadora de Areas 0.1 ####")
print ("########## by Van Lynx ###########")
print ("##################################")

opcion = "1"

cuadrado = "Cuadrado"
rombo = "Rombo"
rectangulo = "Rectangulo"
romboide = "Romboide"
trapecio = "Trapecio"
poligono = "Poligono Regular"
circunferencia = "Longitud de Circunferencia"
circulo = "Circulo"

while (opcion !="0"):
    print "\nSeleccione qué figura quiere calcular:"
    print "\t1.", cuadrado
    print "\t2.", rectangulo
    print "\t3.", rombo
    print "\t4.", romboide
    print "\t5.", trapecio
    print "\t6.", poligono
    print "\t7.", circunferencia
    print "\t8.", circulo
    print "\t0. Salir"
    opcion = int(raw_input("Haga su elección: "))

    if (opcion == "1"):
        lado_cuadrado = int(raw_input("\n ¿Cual es el lado del cuadrado? "))
        area_cuadrado = lado_cuadrado * 2
        print area_cuadrado

    elif (opcion == "2"):
        ancho_rectangulo = int(raw_input("\n ¿Cual es el ancho del rectangulo? "))
        largo_rectangulo = int(raw_input("\n ¿Cual es el largo del rectangulo? "))
        area_rectangulo = ancho_rectangulo * largo_rectangulo
        print area_rectangulo

    elif (opcion == "3"):
        diag_may_rombo = int(raw_input("\n ¿Cual es la diagonal mayor del rombo? "))
        diag_men_rombo = int(raw_input("\n ¿Cual es la diagonal menor del rombo? "))
        area_rombo = (diag_may_rombo * diag_men_rombo) / 2
        print area_rombo

    elif (opcion == "4"):
        base_romboide = int(raw_input("\n ¿Cual es la base de romboide? "))
        altura_romboide = int(raw_input("\n ¿Cual es la altura del romboide? "))
        area_romboide = base_romboide * altura_romboide
        print area_romboide

    elif (opcion == "5"):
        b_may_trapecio = int(raw_input("\n ¿Cual es la base mayor del trapecio? "))
        b_men_trapecio = int(raw_input("\n ¿Cual es la base menor del trapecio? "))
        altura_trapecio = int(raw_input("\n ¿cual es la altura del trapecio? ")
        area_trapecio = (b_may_trapecio * b_men_trapecio) * altura_trapecio / 2
        print area_trapecio

    elif (opcion == "6"):
        perimetro_poligono = int(raw_input("\n ¿Cual es elperimetro? "))
        apotema_poligono = int(raw_input("\n ¿Cual es apotema? "))
        area_poligono = (perimetro_poligono * apotema_poligono) / 2
        print area_poligono

    elif (opcion == "7"):
        radio_circf = int(raw_input("\n ¿Cual es el radio? "))
        longitud_circf = 2 * 3.14 * radio_circf
        print longitud_circf

    elif (opcion == "8"):
        radio_circ = int(raw_input("\n ¿Cual es el radio? "))
        longitud_circ = 3.14 * (radio_circ ** 2)
        print longitud_circ
    elif (opcion == "0"):
        print ("\n\n Espero que te haya sido de utilidad n.n")
        break
    else:
        print ("\nOpcion no reconocida")
    input ("\n\nPulse Enter para continuar")
Gracias de antemano
 #447958  por Baal_30
 07 Jul 2014, 14:42
Yo de python ni idea, pero quizás sea porque tienes que poner altura_trapecio / 2 entre paréntesis. No se como funciona en python lo de la prioridad y todo eso, pero prueba el código así :
area_trapecio = (b_may_trapecio * b_men_trapecio) * (altura_trapecio / 2)
Es en lo único que puedo ayudarte :/

EDITO: Estaba mirando tu código, y he visto que en la linea de arriba de la que te da el error, te falta cerrar un paréntesis más, no se para que sirve ese paréntesis porque no se nada de python, pero mirando el resto del código, en todas las lineas de introducción de los datos lo llevan, y la de justo arriba a la que te da error, no lo lleva. Quizás esté ahí el error. Un saludo.
 #447959  por ikroox
 07 Jul 2014, 14:52
Baal_30 escribió:Yo de python ni idea, pero quizás sea porque tienes que poner altura_trapecio / 2 entre paréntesis. No se como funciona en python lo de la prioridad y todo eso, pero prueba el código así :
area_trapecio = (b_may_trapecio + b_men_trapecio) * (altura_trapecio / 2)
Es en lo único que puedo ayudarte :/
Gracias, pero la prioridad es igual que en las matemáticas, por lo cual creo que no hace falta poner el parentesis (primero haría la suma de las bases, luego lo multiplica y despues divide, se supone).

-He cambiado la formula, que estaba mal escrita, estaba multiplicando las bases en vez de sumarlas -
 #447965  por Baal_30
 07 Jul 2014, 16:00
Mira mi mensaje de antes, que lo había editado, no se si llegaste a verlo ;)
 #447967  por ikroox
 07 Jul 2014, 16:27
Baal_30 escribió:Mira mi mensaje de antes, que lo había editado, no se si llegaste a verlo ;)
Si, tienes razón, lo leí pero ya lo había mandado ^^

Si, era exactamente eso que decías, faltaba el paréntesis (la mala costumbre de tener el programa a media pantalla), merezco la muerte por no fijarme en ello.

Pero ahora se me surge otro error, y es que cuando me sale la lista e inserto el número que quiero no me lo reconoce, he estado mirando por google y nada :s
La cosa quedaría en la pantalla tal que así
Código: [ Debe registrarse para ver este enlace ]
Seleccione qué figura quiere calcular:
	1. Cuadrado
	2. Rectangulo
	3. Rombo
	4. Romboide
	5. Trapecio
	6. Poligono Regular
	7. Longitud de Circunferencia
	8. Circulo
	0. Salir
Haga su elección: 1

Opcion no reconocida


Pulse Enter para continuar
Ahora creo que no son los paréntesis, porque he intentado de todo quitándolos y poniendolos pero nada, cambie los input y de todo, creo que tiene que ver con la utilización de Opino que iría mas rápido rehaciendo todo el código, pero me haría ilusión que funcionase n.n
 #447970  por Baal_30
 07 Jul 2014, 16:46
Ahí ya no te puedo ayudar, lo siento. Quizás en vez de usar if y elif, usaría lo que en C es switch, supongo que en Python también estará, pero no se con que palabra clave ni como se usaría. A ver si alguien te puede ayudar más ;)
 #448012  por ikroox
 07 Jul 2014, 22:55
Baal_30 escribió:Ahí ya no te puedo ayudar, lo siento. Quizás en vez de usar if y elif, usaría lo que en C es switch, supongo que en Python también estará, pero no se con que palabra clave ni como se usaría. A ver si alguien te puede ayudar más ;)
Gracias por todo, al final acabé reescribiendo todo el código y añadiendo nuevas funciones ^^ (ahora por lo menos funciona en el ninja-ide, porque desde la terminal de ubuntu me da error :()

Bueno, dejo el código por si a alguien le interesa como lo hice y por si sirve de ayuda:
[ Debe registrarse para ver este enlace ]
# -*- coding: utf-8 -*-
# Gracias a 'Baal_30' del foro de www.indetectables.net
# Y gracias tambien a 'Jesús Conde'' por esos grandes tutoriales que hace


print ("    |==================================|    ")
print ("====|---- Calculadora de Areas 0.2 ----|====")
print ("====|---------- by Van Lynx -----------|====")
print ("    |==================================|    ")

while True:

    pi = 3.14
    seleccion = ""

    import sys
    import os

    def area_cuadrado(lado):
        area_c = lado ** 2
        return area_c

    def area_rectangulo(ancho, alto):
        area_r = ancho * alto
        return area_r

    def area_triangulo(base, altura):
        area_t = (base * altura) / 2
        return area_t

    def area_rombo(diagonal_M, diagonal_m):
        area_r = diagonal_M + diagonal_m / 2
        return area_r

    def area_romboide(base_r, altura_r):
        area_rb = base_r *altura_r
        return area_rb

    def area_trapecio(base_M, base_m, altura_t):
        area_tp = (base_M + base_m) * altura_t / 2
        return area_tp

    def area_poligono_regular(perimetro, apotema):
        area_pr = (perimetro * apotema) /2
        return area_pr

    def area_circulo(radio_c):
        area_cl = pi * radio ** 2
        return area_cl

    def area_sector_circular(radio_sc, alpha_sc):
        area_sc = ( pi * radio ** 2 * alpha_sc) / 2
        return area_sc

    def area_corona_circular(radio_M, radio_m):
        area_cc = pi * (radio_m ** 2 - radio_m ** 2)
        return area_cc

    def area_trapecio_circular(radio_M_tc, radio_m_tc, alpha_tc):
        area_tc = pi * (radio_M_tc**2 - radio_m_tc**2) * alpha_tc / 360
        return area_tc

    def longitud_circunferencia(radio):
        long_circ = 2 * pi * radio
        return long_circ

    def longitud_arco_de_circunferencia(radio_adc, alpha):
        long_adc = (2 * pi * radio_adc * alpha) / 360
        return long_adc

    def restart_program():
        python = sys.executable
        os.execl(python, python, * sys.argv)

    print "\nSeleccione qué figura quiere calcular:"
    print ""
    print "\t1.Cuadrado"
    print "\t2.Rectangulo"
    print "\t3.Rombo"
    print "\t4.Romboide"
    print "\t5.Trapecio"
    print "\t6.Triangulo"
    print "\t7.Poligono regular"
    print "\t8.Circunferencia"
    print "\t9.Arco de circunferencia"
    print "\t10.Circulo"
    print "\t11.Sector circular"
    print "\t12.Corona circular"
    print "\t13.Trapecio circular"

    seleccion = raw_input("\nCopia el numero de la figura que quieras calcular: ")

    if seleccion == "1": #cuadrado
        print ("\nHas elegido CUADRADO")
        lado = input("\n¿Cuanto mide el lado de tu cuadrado? ")
        print ""
        print (area_cuadrado(lado))

    if seleccion == "2": #rectángulo
        print ("\nHas elegido RECTAGULO")
        ancho = input("\n¿Cuanto mide el ancho de tu rectángulo? ")
        alto = input("\n¿Cuanto mide el alto de tu rectángulo? ")
        print ""
        print (area_rectangulo(ancho, alto))

    if seleccion == "3": #rombo
        print ("\nHas elegido ROMBO")
        diagonal_M = input("\n¿Cuanto mide la diagonal mayor de tu rombo? ")
        diagonal_m = input("\n¿Cuanto mide la diagonal menor de tu rombo? ")
        print ""
        print (area_rombo(diagonal_M, diagonal_m))

    if seleccion == "4": #romboide
        print ("\nHas elegido ROMBOIDE")
        base_r = input("\n¿Cuanto mide la base de tu romboide? ")
        altura_r = input("\n¿Cuanto mide la altura de tu romboide? ")
        print ""
        print (area_romboide(base_r, altura_r))

    if seleccion == "5": #trapecio
        print ("\nHas elegido TRAPECIO")
        base_M = input("\n¿Cuanto mide la base mayor de tu trapecio? ")
        base_m = input("\n¿Cuanto mide la base menor de tu trapecio? ")
        altura_t = input("\n¿Cuanto mide la altura de tu trapecio? ")
        print ""
        print (area_trapecio(base_M, base_m, altura_t))

    if seleccion == "6": #triangulo
        print ("\nHas elegido TRIÁNGULO")
        base = input("\n¿Cuanto mide la base de tu triángulo? ")
        altura = input("\n¿Cuanto mide la altura de tu triángulo? ")
        print ""
        print (area_triangulo(base, altura))

    if seleccion == "7": #poligono regular
        print ("\nHas elegido POLIGONO REGULAR")
        perimetro = input("\n¿Cuanto es el perímetro de su figura? ")
        apotema = input("\n¿Cuanto mide la apotema de tu polígono? ")
        print ""
        print (area_poligono_regular(perimetro, apotema))

    if seleccion == "8": #circunferencia
        print ("\nHas elegido CIRCUNFERENCIA")
        radio = input("\n¿Cuanto es el radio de su circunferencia? ")
        print ""
        print (longitud_circunferencia(radio))

    if seleccion == "9": #arco
        print ("\nHas elegido ARCO DE CIRCUNFERENCIA")
        radio_adc = input("\n¿Cuanto es el radio de su arco? ")
        alpha = input("\n¿Cuantos grados tiene su arco? ")
        print ""
        print (longitud_arco_de_circunferencia(radio_adc, alpha))

    if seleccion == "10": #circulo
        print ("\nHas elegido CÍRCULO")
        radio_c = input("\n¿Cuanto es el radio de su círculo? ")
        print ""
        print (area_circulo(radio_c))

    if seleccion == "11": #sector circular
        print ("\nHas elegido SECTOR CIRCULAR")
        radio_sc = input("\n¿Cuanto es el radio de su círculo? ")
        alpha_sc = input("\n¿Cuantos grados tiene su sector? ")
        print ""
        print (area_sector_circular(radio_sc, alpha_sc))

    if seleccion == "12": #corona circular
        print ("\nHas elegido CORONA CIRCULAR")
        radio_M = input("\n¿Cual es el radio mayor de su corona? ")
        alpha_m = input("\n¿Cual es el radio menor de su corona? ")
        print ""
        print (area_corona_circular(radio_M, radio_m))

    if seleccion == "13": #trapecio circular
        print ("\nHas elegido TRAPECIO CIRCULAR")
        radio_M_tc = input("\n¿Cual es el radio mayor de su trapecio? ")
        radio_m_tc = input("\n¿Cual es el radio menor de su trapecio? ")
        alpha_tc = input("\n¿Cuantos grados tiene su sector? ")
        print ""
        print (area_trapecio_circular(radio_M_tc, radio_m_tc, alpha_tc))
 #449036  por sanko
 15 Jul 2014, 18:04
Siento no haber podido fijarme en este tema antes amigo.
He estado mirando el código y voy a darte un par de consejos si es que pueden serte utiles claro... Hay que aprovechar las estructuras de control que nos proporciona python, como listas o diccionarios y sobretodo el potencial de las lambdas aqui podria ser muy interesante.

Me he permitido crear un pequeño ejemplo:
figuras = ["cuadrado", "rectangulo", "rombo"] 
formulas = [(lambda (l,): l ** 2), (lambda (a, h): a * h), (lambda (b, h): (b*h)/2)]

def client():
	print "Area calculator by Van Lynx"
	print "-----------------------------\n"
	print "Figuras disponibles: %s" % ", ".join(figuras)
	data = raw_input("Escriba el nombre del area que quiera calcular:")
	params = input("Escriba una dupla con los parametros:")
	print formulas[figuras.index(data)](params)
	
client()
Podriamos declarar dos listas o en su defecto y depende de tus preferencias, un diccionario para listar las figuras disponibles y sus formulas ya declaradas en forma de lambda y luego ya pues pasamos los parametros en forma de tupla para ahorrarnos el validar cuantos parametros requiere cada formula.
Al final obtenemos lo mismo en muchas menos lineas:
Código: [ Debe registrarse para ver este enlace ]
[[email protected] Desktop]$ python2 recode.py 
Area calculator by Van Lynx
-----------------------------

Figuras disponibles: cuadrado, rectangulo, rombo
Escriba el nombre del area que quiera calcular:cuadrado
Escriba una dupla con los parametros:(20,)
400
[[email protected] Desktop]$ python2 recode.py 
Area calculator by Van Lynx
-----------------------------

Figuras disponibles: cuadrado, rectangulo, rombo
Escriba el nombre del area que quiera calcular:rombo
Escriba una dupla con los parametros:(10, 15)
75
Saludos bro