[Python] - Menú con While.

Iniciado por Meta, 15 Octubre 2010, 06:10 AM

0 Miembros y 2 Visitantes están viendo este tema.

Meta

Esta función no me funciona.

Código (python) [Seleccionar]
#
angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
#
            print angulo


¿Por qué?
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

.:WindHack:.

Para que el programa retorne al menú debes de organizar éstas líneas al igual que la indentación:

Código (python,1,2,17) [Seleccionar]
opcion = '' #Esta linea no es necesaria, ya que mas adelante especificas todo en el raw_input()...
while opcion < 'a' or opcion > 'i': #Crea un bucle infinito para el menu y no hagas referencia a susodicha variable...
    print '''Selecciona una opción:
            a) Introducir el primer vector.
            b) Introducir el segundo vector.
            c) Calcular la suma.
            d) Calcular la diferencia.
            e) Calcular el producto escalar.
            f) Calcular el producto vectorial.
            g) Calcular el ángulo (en gastos) entre ellos.
            h) Calcular la longitud.
            i) Finalizar. '''

    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')

# Modifica la indentacion para acomodarla al bucle.
if  opcion == 'a':


Algo así es a lo que me refiero:

Código (python) [Seleccionar]
while True: #Bucle infinito del menu...
    print '''Selecciona una opción:
            a) Introducir el primer vector.
            b) Introducir el segundo vector.
            c) Calcular la suma.
            d) Calcular la diferencia.
            e) Calcular el producto escalar.
            f) Calcular el producto vectorial.
            g) Calcular el ángulo (en gastos) entre ellos.
            h) Calcular la longitud.
            i) Finalizar. '''

    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')

# Indentacion perteneciente al bucle.
    if  opcion == 'a':
#  [... Code ... ]
    elif opcion == 'i':
        print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
        print 'Gracias por usar el programa.'
        exit() #Para salir


También recuerda que dispones del else cuando usas: if-elif-else


Follow me on Twitter: @windhack | Visit my website: www.daw-labs.com

"The only thing they can't take from us are our minds."

Meta

#22
He hecho algunas modificaciones.

Código (python) [Seleccionar]

from math import acos, pi, sqrt



opcion = ''
while opcion < 'a' or opcion > 'i':
#while opcion in 'abcdefghi':
    print '''Selecciona una opción:
            a) Introducir el primer vector.
            b) Introducir el segundo vector.
            c) Calcular la suma.
            d) Calcular la diferencia.
            e) Calcular el producto escalar.
            f) Calcular el producto vectorial.
            g) Calcular el ángulo (en gastos) entre ellos.
            h) Calcular la longitud.
            i) Finalizar. '''
           
    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
   
# Primer vector.
if  opcion == 'a':
    x1 = float(raw_input('Introduce valor x1: '))
    y1 = float(raw_input('Introduce valor y1: '))
    z1 = float(raw_input('Introduce valor z1: '))
    print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.'

# Segundo vector.
elif opcion == 'b':
    x2 = float(raw_input('Introduce valor x2: '))
    y2 = float(raw_input('Introduce valor y2: '))
    z2 = float(raw_input('Introduce valor z2: '))
    print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.'

# Suma.
elif opcion == 'c':

        suma = (x1 + x2, y1 + y2, z1 + z2)
        print suma

# Diferencia.
elif opcion == 'd':

        diferencia = (x1 - x2, y1 - y2, z1 - z2)
        print diferencia

# Producto escalar.
elif opcion == 'e':

        producto = (x1 * x2 + y1 * y2 + z1 * z2)
        print producto

# Producto vectorial.
elif opcion == 'f':

        vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
        print vectorial

# Ángulo.
elif opcion == 'g':
        angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
        print angulo

# Longitud.
elif opcion == 'h':

        x = float(raw_input('Introduce valor x: '))
        y = float(raw_input('Introduce valor y: '))
        z = float(raw_input('Introduce valor z: '))

        longitud = sqrt(x**2+y**2+z**2)
        print longitud

elif opcion == 'i':
        print 'Gracias por usar el programa.'

else:
        print 'Puedes teclear estas siguientes opciones: a, b, c, d, e, f, g, h o i. Usted haz tecleado', opcion



Me da error técnico. Si pulsto la opción a), puedo rellenar los datos pero no puedo volver al menú automaticamente. Es como si el programa acabó.

Con este otro código me funciona algo mejor. he cambiado lo del while por otro, pero prefiero el de tu forma que esta.

Código (python) [Seleccionar]
# encoding: utf-8

from math import acos, pi, sqrt

opcion = ''
#while opcion < 'a' or opcion > 'i':
while opcion in 'abcdefghi':
    print '''Selecciona una opción:
            a) Introducir el primer vector.
            b) Introducir el segundo vector.
            c) Calcular la suma.
            d) Calcular la diferencia.
            e) Calcular el producto escalar.
            f) Calcular el producto vectorial.
            g) Calcular el ángulo (en gastos) entre ellos.
            h) Calcular la longitud.
            i) Finalizar. '''
           
    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
   
    # Primer vector.
    if  opcion == 'a':
        x1 = float(raw_input('Introduce valor x1: '))
        y1 = float(raw_input('Introduce valor y1: '))
        z1 = float(raw_input('Introduce valor z1: '))
        print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.'

    # Segundo vector.
    elif opcion == 'b':
        x2 = float(raw_input('Introduce valor x2: '))
        y2 = float(raw_input('Introduce valor y2: '))
        z2 = float(raw_input('Introduce valor z2: '))
        print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.'

    # Suma.
    elif opcion == 'c':

            suma = (x1 + x2, y1 + y2, z1 + z2)
            print suma

    # Diferencia.
    elif opcion == 'd':

            diferencia = (x1 - x2, y1 - y2, z1 - z2)
            print diferencia

    # Producto escalar.
    elif opcion == 'e':

            producto = (x1 * x2 + y1 * y2 + z1 * z2)
            print producto

     # Producto vectorial.
    elif opcion == 'f':

            vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
            print vectorial

    # Ángulo.
    elif opcion == 'g':
            angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
            print angulo

    # Longitud.
    elif opcion == 'h':

            x = float(raw_input('Introduce valor x: '))
            y = float(raw_input('Introduce valor y: '))
            z = float(raw_input('Introduce valor z: '))

            longitud = sqrt(x**2+y**2+z**2)
            print longitud

    elif opcion == 'i':
            print 'Gracias por usar el programa.'

    else:
            print 'Puedes teclear estas siguientes opciones: a, b, c, d, e, f, g, h o i. Usted haz tecleado', opcion


Un error que me tiene harto es al pulsar el modo g).

Traceback (most recent call last):
  File "/home/user/NetBeansProjects/kam/src/kam.py", line 90, in <module>
    angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
TypeError: unsupported operand type(s) for *: 'float' and 'builtin_function_or_method'
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/