• Python

 #447956  por ikroox
 
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: Seleccionar todo
    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: Seleccionar todo
# -*- 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
 
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
 
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
 
Mira mi mensaje de antes, que lo había editado, no se si llegaste a verlo ;)
 #447967  por ikroox
 
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: Seleccionar todo
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
Código: Seleccionar todo
opcion = "1"
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
 
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
 
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:
 #449036  por sanko
 
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: Seleccionar todo
[[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