Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 15 Octubre 2010, 06:10 am



Título: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 06:10 am
Buenas:

Por fin llegamos a la parte final de While con un pezado de menú.

(http://www.subeimagenes.com/img/menu-4530.gif)

Por ahora estoy en el inicio.
Código
  1. # Importar arcoseno.
  2. from math import acos
  3.  
  4. vector1 = float(raw_input('Introduce el primer vector: '))
  5. vector2 = float(raw_input('Introduce el segundo vector: '))
  6.  
  7. opcion = ''
  8. while opcion < 'a' or opcion > 'g':
  9.    print 'Selecciona una opción: \n'
  10.    print 'a) Calcular la suma.'
  11.    print 'b) Calcular la diferencia.'
  12.    print 'c) Calcular el producto escalar.'
  13.    print 'd) Calcular el producto vectorial.'
  14.    print 'e) Calcular el ángulo (en gastos) entre ellos.'
  15.    print 'f) Calcular la longitud.'
  16.    print 'g) Finalizar. '
  17.    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
  18.    if opcion == 'a':
  19.        x1 = float(raw_input('Introduce el primer vector: '))

Estoy trabado en hacer esta suma.
(http://www.subeimagenes.com/img/menu-suma-4531.gif)
¿Dónde saco los x1, y1 y z1?

Pensé que es al introducir los vectores que te pone al principio pero no.

Saludo.

Edito:

Quiero ver un ejemplo de cómo hacen la suma. No se si los vectrres introducidos hay que hacer algo con ellos o pongo desde cero otra vez crear variables con raw_input y poder hacer los cácluos.

Código
  1. # Importar arcoseno.
  2. from math import acos
  3.  
  4. vector1 = float(raw_input('Introduce el primer vector: '))
  5. vector2 = float(raw_input('Introduce el segundo vector: '))
  6.  
  7. opcion = ''
  8. while opcion < 'a' or opcion > 'g':
  9.    print 'Selecciona una opción: '
  10.    print 'a) Calcular la suma.'
  11.    print 'b) Calcular la diferencia.'
  12.    print 'c) Calcular el producto escalar.'
  13.    print 'd) Calcular el producto vectorial.'
  14.    print 'e) Calcular el ángulo (en gastos) entre ellos.'
  15.    print 'f) Calcular la longitud.'
  16.    print 'g) Finalizar. '
  17.    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
  18.    if opcion == 'a':
  19.  
  20.        print 'Suma.'
  21.    elif opcion == 'b':
  22.  
  23.        print 'algo'
  24.    elif opcion == 'c':
  25.  
  26.        print 'algo'
  27.    elif opcion == 'd':
  28.  
  29.        print 'algo'
  30.    elif opcion == 'e':
  31.  
  32.        print 'algo'
  33.    elif opcion == 'f':
  34.  
  35.        print 'algo'
  36.    elif opcion == 'g':
  37.        print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  38. print 'Gracias por usar el programa.'
  39.  


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 08:02 am
Hola de nuevo:

Por ahora he hecho cosas pero tengo errores por todas partes.

Código
  1. # Importar arcoseno, pi y raíz.
  2. from math import arcos, pi, sqrt
  3.  
  4. vector1 = float(raw_input('Introduce el primer vector: '))
  5. vector2 = float(raw_input('Introduce el segundo vector: '))
  6.  
  7. opcion = ''
  8. while opcion < 'a' or opcion > 'g':
  9.    print 'Selecciona una opción: '
  10.    print 'a) Calcular la suma.'
  11.    print 'b) Calcular la diferencia.'
  12.    print 'c) Calcular el producto escalar.'
  13.    print 'd) Calcular el producto vectorial.'
  14.    print 'e) Calcular el ángulo (en gastos) entre ellos.'
  15.    print 'f) Calcular la longitud.'
  16.    print 'g) Finalizar. '
  17.    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
  18.  
  19.    x1 = 3
  20.    x2 = 4
  21.    y1 = 5
  22.    y2 = 6
  23.    z1 = 7
  24.    z2 = 8
  25.  
  26. # Suma.
  27.    if opcion == 'a':
  28.  
  29.        suma = (x1 + x2, y1 + y2, z1 + z2)
  30.        print suma
  31.  
  32. # Diferencia.
  33.    elif opcion == 'b':
  34.  
  35.        diferencia = (x1 - x2, y1 - y2, z1 - z2)
  36.        print diferencia
  37.  
  38. # Producto escalar.
  39.    elif opcion == 'c':
  40.  
  41.        producto = (x1 * x2 + y1 * y2 + z1 * z2)
  42.        print producto
  43.  
  44. # Producto vectorial.
  45.    elif opcion == 'd':
  46.  
  47.        vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  48.        print vectorial
  49.  
  50. # Ángulo.
  51.    elif opcion == 'e':
  52.  
  53.        angulo = (180 / pi) * arcos * ((x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * (sqrt(x2**2 + y2**2 + z2**2)))
  54.        print angulo
  55.  
  56. # Longitud.
  57.    elif opcion == 'f':
  58.  
  59.        x = 56
  60.        y = 92
  61.        z = 50
  62.  
  63.        longitud = sqrt(x**2+y**2+z**2)
  64.        print longitud
  65.  
  66.    elif opcion == 'g':
  67.        print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  68. print 'Gracias por usar el programa.'
  69.  

(http://www.subeimagenes.com/img/menu-dos-4532.gif)

Alguna ayuda de estos errores.

Saludo.


EDITO:

Otra cosa, los dos vectores que te pide el principio por ahora lo veo inútil.


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 15 Octubre 2010, 12:13 pm
Los vectores del principio los ves inútil porque estas metiendo las variables a mano :xD ... x1, x2, x3, y1, y2 e y3 son los elementos de los dos vectores, empieza por eso, no por las operaciones.

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 15:38 pm
Me lo imaginaba. Son dos vectores a introducir y hay 6 variables diferentes en total. Parece que hay que seleccionar dos y dejar fijo 4.


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 15 Octubre 2010, 15:43 pm
Citar
[...]Parece que hay que seleccionar dos y dejar fijo 4.[...]
Eso no lo he entendido, a que te refieres?

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 16:09 pm
Mira las 6 variables aquí que he dejado fijas.

Código
  1.    x1 = 3
  2.    x2 = 4
  3.    y1 = 5
  4.    y2 = 6
  5.    z1 = 7
  6.    z2 = 8

En realidad te piden dos vectores de entrada. Dos vectores lo modificas y las otros 4 serán fijas digo yo.


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 15 Octubre 2010, 16:10 pm
Sabes lo que es un vector? (listas o tuplas)

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 17:23 pm
Ya por decir tuplas. Se refiere algo de esto.

[3, 5, 6, 9, 1, 2] por poner un ejemplo de for in.

Antes debo corregir estos errores.

(http://www.subeimagenes.com/img/menu-2-4540.gif)

(http://www.subeimagenes.com/img/menu-3-4541.gif)

(http://www.subeimagenes.com/img/menu-4-4542.gif)


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 15 Octubre 2010, 17:50 pm
Bien, entonces va una segunda pregunta, donde estas utilizando tuplas o listas en tu ejercicio? ;)

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 21:52 pm
No lo estoy usando y no debo usarlo. Hay que usar sólo el bucle While y no el for in como creía.


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 15 Octubre 2010, 22:29 pm
Si crees que no debes de usarlo entonces no vas a hacer nunca el ejercicio :silbar:
Crees que una tupla o lista sirve solo con el for? Se usa con el while también :¬¬ (por hacer referencia a tu ejercicio)

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 23:22 pm
Pregunto, ya que entra en la categoría de sólo while sin for in que indica el pdf que puedes ver en la página 109.

http://marmota.act.uji.es/mtp/pdf/python.pdf

Saludo.


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 15 Octubre 2010, 23:35 pm
Que indica? ... Que tienes que tener dos vectores :rolleyes:
"Deseamos confeccionar un programa que permita operar con dos vectores".
"Introducir el primer vector"
"Introducir el segundo vector"

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 15 Octubre 2010, 23:52 pm
Que indica? ... Que tienes que tener dos vectores :rolleyes:

Si, y eso me da vueltas a la cabeza, que supuestamente debe ser while, no un tem apor delante como indica en la página 109 del pdf http://marmota.act.uji.es/mtp/pdf/python.pdf . Con razón que siempre me faltaba ideas que luego veía.

"Deseamos confeccionar un programa que permita operar con dos vectores".
"Introducir el primer vector"
"Introducir el segundo vector"

Entonces seguiré practicando en el pdf a ver si encuentro la solución.


Saludos

Gracias por tu tiempo.



Título: Re: [Python] - Menú con While.
Publicado por: @Sthéfano en 16 Octubre 2010, 00:11 am
Solo un pequeño dato mas :D

#
Código
  1. Importar arcoseno.
  2. from math import acos
  3.  
  4. vector1 = float(raw_input('Introduce el primer vector: '))
  5. vector2 = float(raw_input('Introduce el segundo vector: '))
  6.  
  7. opcion = ''
  8. while opcion < 'a' or opcion > 'g':
  9.    print 'Selecciona una opción: \n'
  10.    print 'a) Calcular la suma.'
  11.    print 'b) Calcular la diferencia.'
  12.    print 'c) Calcular el producto escalar.'
  13.    print 'd) Calcular el producto vectorial.'
  14.    print 'e) Calcular el ángulo (en gastos) entre ellos.'
  15.    print 'f) Calcular la longitud.'
  16.    print 'g) Finalizar. '
  17.    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
  18.    if opcion == 'a':
  19.        x1 = float(raw_input('Introduce el primer vector: '))

En vez de tantos print, podrias usar comillas triples.

Código
  1. # Importar arcoseno.
  2. from math import acos
  3.  
  4. vector1 = float(raw_input('Introduce el primer vector: '))
  5. vector2 = float(raw_input('Introduce el segundo vector: '))
  6.  
  7. opcion = ''
  8. while opcion < 'a' or opcion > 'g':
  9.    print '''
  10.        Selecciona una opcion:
  11.            a) Calcular la suma.
  12.            b) Calcular la diferencia.
  13.            c) Calcular el producto escalar.
  14.            d) Calcular el producto vectorial.
  15.            e) Calcular el ángulo (en gastos) entre ellos.
  16.            f) Calcular la longitud.
  17.            g) Finalizar.
  18.    '''
  19.    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
  20.    if opcion == 'a':
  21.        x1 = float(raw_input('Introduce el primer vector: '))

Te ahorras muchos print por hacer :P

Saludos ;)


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 16 Octubre 2010, 00:54 am
Muchas gracias. No recuerdo haberlo leído en ninguta parte del PDF que estoy leyendo. Apróximadamente voy por la página 109 y no he leído nada de eso y no se si vendrá.

http://marmota.act.uji.es/mtp/pdf/python.pdf

Saludo.


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 16 Octubre 2010, 01:20 am

Meta, retiro lo dicho ya que puede ser que estuviese equivocado :-[
Puede ser que cuando en el libro se refieren a vectores, se refieren a vectores matemáticos sin hacer referencia a listas o tuplas, quiero pensar que no te van a pedir hacer algo sin explicartelo :-\
A ver, volviendo al código que tenías antes de que yo dijera esto ...
Citar
Los vectores del principio los ves inútil porque estas metiendo las variables a mano :xD ... x1, x2, x3, y1, y2 e y3 son los elementos de los dos vectores, empieza por eso, no por las operaciones.
En tu código asignas los valores de las variables a mano, y lo que debes de hacer es tener un input por cada variable, y todo eso metido dentro de la opción "introducir el primer vector" e "introducir el segundo vector"
Código:
Si opcion 1
var1 = pido dato
var2 = pido dato
var3 = pido dato
Si opcion 2
var4 = pido dato
.
.
.
A ver si lo solucionamos :P

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 16 Octubre 2010, 02:47 am
Ya decía yo. Rectificar es de sabio.

Hay algo que no entiendo. Añado estás líneas de código.

Código
  1. # Introducir vectores.
  2. vector1 = float(raw_input('Introduce el primer vector: '))
  3. vector2 = float(raw_input('Introduce el segundo vector: '))

Por lo que te entiendo pregunta por más variables en cada vector que sería así supuestamente.

Código
  1. from math import acos, pi, sqrt
  2.  
  3. opcion = ''
  4. while opcion < 'a' or opcion > 'i':
  5.    print '''Selecciona una opci&#243;n:
  6.            a) Introducir el primer vector.
  7.            b) Introducir el segundo vector.
  8.            c) Calcular la suma.
  9.            d) Calcular la diferencia.
  10.            e) Calcular el producto escalar.
  11.            f) Calcular el producto vectorial.
  12.            g) Calcular el &#225;ngulo (en gastos) entre ellos.
  13.            h) Calcular la longitud.
  14.            i) Finalizar. '''
  15.  
  16.    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  17.  
  18. # Primer vector.
  19. if  opcion == 'a':
  20.    x1 = float(raw_input('Introduce valor x1: '))
  21.    y1 = float(raw_input('Introduce valor y1: '))
  22.    z1 = float(raw_input('Introduce valor z1: '))
  23.  
  24. # Segundo vector.
  25. elif opcion == 'b':
  26.    x2 = float(raw_input('Introduce valor x2: '))
  27.    y2 = float(raw_input('Introduce valor y2: '))
  28.    z2 = float(raw_input('Introduce valor z2: '))
  29. # Suma.
  30. elif opcion == 'c':
  31.  
  32.        suma = (x1 + x2, y1 + y2, z1 + z2)
  33.        print suma
  34.  
  35. # Diferencia.
  36. elif opcion == 'd':
  37.  
  38.        diferencia = (x1 - x2, y1 - y2, z1 - z2)
  39.        print diferencia
  40.  
  41. # Producto escalar.
  42. elif opcion == 'e':
  43.  
  44.        producto = (x1 * x2 + y1 * y2 + z1 * z2)
  45.        print producto
  46.  
  47. # Producto vectorial.
  48. elif opcion == 'f':
  49.  
  50.        vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  51.        print vectorial
  52.  
  53. # &#193;ngulo.
  54. elif opcion == 'g':
  55.  
  56.        print  (180 / pi) * arcos * ((x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * (sqrt(x2**2 + y2**2 + z2**2))
  57.  
  58. # Longitud.
  59. elif opcion == 'h':
  60.  
  61.        x = 56
  62.        y = 92
  63.        z = 50
  64.  
  65.        longitud = sqrt(x**2+y**2+z**2)
  66.        print longitud
  67.  
  68. elif opcion == 'i':
  69.        print 'S&#243;lo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  70. print 'Gracias por usar el programa.'

¿Te refieres algo así?

Ahora mismo no lo puedo ejecutar para hacer pruebas porque me da fallos.
Citar
File "/home/user/NetBeansProjects/kam/src/kam.py", line 90
    elif opcion == 'h':
       ^
SyntaxError: invalid syntax


Título: Re: [Python] - Menú con While.
Publicado por: Novlucker en 16 Octubre 2010, 03:32 am
Revisa paréntesis en g :P

Saludos


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 16 Octubre 2010, 04:13 am
Gracias por el error, sólo es el del paréntesis.

En su salida me ha dado este resultado.

Citar
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.
Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: a
Introduce valor x1: 3
Introduce valor y1: 4
Introduce valor z1: 5
Gracias por usar el programa.

Por fin me funciona algo. Por ahora me falta que vuelta al menú para hacer la opción b). He leído por Internet que los goto están prohibidos usarlos para el aprendizaje o sino cogeré malos hábitos en programación. Deja ver como me sale.


Edito:


Código
  1. from math import acos, pi, sqrt
  2.  
  3. opcion = ''
  4. while opcion < 'a' or opcion > 'i':
  5.    print '''Selecciona una opción:
  6.            a) Introducir el primer vector.
  7.            b) Introducir el segundo vector.
  8.            c) Calcular la suma.
  9.            d) Calcular la diferencia.
  10.            e) Calcular el producto escalar.
  11.            f) Calcular el producto vectorial.
  12.            g) Calcular el ángulo (en gastos) entre ellos.
  13.            h) Calcular la longitud.
  14.            i) Finalizar. '''
  15.  
  16.    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  17.  
  18. # Primer vector.
  19. if  opcion == 'a':
  20.    x1 = float(raw_input('Introduce valor x1: '))
  21.    y1 = float(raw_input('Introduce valor y1: '))
  22.    z1 = float(raw_input('Introduce valor z1: '))
  23.  
  24. # Segundo vector.
  25. elif opcion == 'b':
  26.    x2 = float(raw_input('Introduce valor x2: '))
  27.    y2 = float(raw_input('Introduce valor y2: '))
  28.    z2 = float(raw_input('Introduce valor z2: '))
  29. # Suma.
  30. elif opcion == 'c':
  31.  
  32.        suma = (x1 + x2, y1 + y2, z1 + z2)
  33.        print suma
  34.  
  35. # Diferencia.
  36. elif opcion == 'd':
  37.  
  38.        diferencia = (x1 - x2, y1 - y2, z1 - z2)
  39.        print diferencia
  40.  
  41. # Producto escalar.
  42. elif opcion == 'e':
  43.  
  44.        producto = (x1 * x2 + y1 * y2 + z1 * z2)
  45.        print producto
  46.  
  47. # Producto vectorial.
  48. elif opcion == 'f':
  49.  
  50.        vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  51.        print vectorial
  52.  
  53. # Ángulo.
  54. elif opcion == 'g':
  55.        print  (180 / pi) * arcos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  56.  
  57. # Longitud.
  58. elif opcion == 'h':
  59.  
  60.        x = float(raw_input('Introduce valor x: '))
  61.        y = float(raw_input('Introduce valor y: '))
  62.        z = float(raw_input('Introduce valor z: '))
  63.  
  64.        longitud = sqrt(x**2+y**2+z**2)
  65.        print longitud
  66.  
  67. elif opcion == 'i':
  68.        print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  69. print 'Gracias por usar el programa.'

Debo hacer algo para que cuando acabe una operación vuelva al menú principal automáticamente, cuando pulse i) para finalizar es cuando debe aparecer el mensaje "Gracias por usar el programa." y se acaba el programa o...

...¿hay que dejarlo así en este ejercicio?

Edito 2:

El programa me debe funcionar de esta manera sin usar GOTOssssssssssssss.

Si pulso a), te pide introducir el primer vector. Luego se acaba el programa y no se puede continuar para rellenar el vector 2.

Desde que introduzca los datos de la opción a), que vuelva almenú principal, así con cada opción excepto la opción i) que es cuando realmente se acaba el programa.


Título: Re: [Python] - Menú con While.
Publicado por: Meta en 16 Octubre 2010, 17:00 pm
Esta función no me funciona.

Código
  1. #
  2. angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  3. #
  4.            print angulo

¿Por qué?


Título: Re: [Python] - Menú con While.
Publicado por: .:WindHack:. en 16 Octubre 2010, 21:13 pm
Para que el programa retorne al menú debes de organizar éstas líneas al igual que la indentación:

Código
  1. opcion = '' #Esta linea no es necesaria, ya que mas adelante especificas todo en el raw_input()...
  2. while opcion < 'a' or opcion > 'i': #Crea un bucle infinito para el menu y no hagas referencia a susodicha variable...
  3.    print '''Selecciona una opción:
  4.            a) Introducir el primer vector.
  5.            b) Introducir el segundo vector.
  6.            c) Calcular la suma.
  7.            d) Calcular la diferencia.
  8.            e) Calcular el producto escalar.
  9.            f) Calcular el producto vectorial.
  10.            g) Calcular el ángulo (en gastos) entre ellos.
  11.            h) Calcular la longitud.
  12.            i) Finalizar. '''
  13.  
  14.    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  15.  
  16. # Modifica la indentacion para acomodarla al bucle.
  17. if  opcion == 'a':

Algo así es a lo que me refiero:

Código
  1. while True: #Bucle infinito del menu...
  2.    print '''Selecciona una opción:
  3.            a) Introducir el primer vector.
  4.            b) Introducir el segundo vector.
  5.            c) Calcular la suma.
  6.            d) Calcular la diferencia.
  7.            e) Calcular el producto escalar.
  8.            f) Calcular el producto vectorial.
  9.            g) Calcular el ángulo (en gastos) entre ellos.
  10.            h) Calcular la longitud.
  11.            i) Finalizar. '''
  12.  
  13.    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  14.  
  15. # Indentacion perteneciente al bucle.
  16.    if  opcion == 'a':
  17. #  [... Code ... ]
  18.    elif opcion == 'i':
  19.        print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  20.        print 'Gracias por usar el programa.'
  21.        exit() #Para salir
  22.  

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



Título: Re: [Python] - Menú con While.
Publicado por: Meta en 17 Octubre 2010, 07:02 am
He hecho algunas modificaciones.

Código
  1. from math import acos, pi, sqrt
  2.  
  3.  
  4.  
  5. opcion = ''
  6. while opcion < 'a' or opcion > 'i':
  7. #while opcion in 'abcdefghi':
  8.    print '''Selecciona una opci&#243;n:
  9.            a) Introducir el primer vector.
  10.            b) Introducir el segundo vector.
  11.            c) Calcular la suma.
  12.            d) Calcular la diferencia.
  13.            e) Calcular el producto escalar.
  14.            f) Calcular el producto vectorial.
  15.            g) Calcular el &#225;ngulo (en gastos) entre ellos.
  16.            h) Calcular la longitud.
  17.            i) Finalizar. '''
  18.  
  19.    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  20.  
  21. # Primer vector.
  22. if  opcion == 'a':
  23.    x1 = float(raw_input('Introduce valor x1: '))
  24.    y1 = float(raw_input('Introduce valor y1: '))
  25.    z1 = float(raw_input('Introduce valor z1: '))
  26.    print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.'
  27.  
  28. # Segundo vector.
  29. elif opcion == 'b':
  30.    x2 = float(raw_input('Introduce valor x2: '))
  31.    y2 = float(raw_input('Introduce valor y2: '))
  32.    z2 = float(raw_input('Introduce valor z2: '))
  33.    print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.'
  34.  
  35. # Suma.
  36. elif opcion == 'c':
  37.  
  38.        suma = (x1 + x2, y1 + y2, z1 + z2)
  39.        print suma
  40.  
  41. # Diferencia.
  42. elif opcion == 'd':
  43.  
  44.        diferencia = (x1 - x2, y1 - y2, z1 - z2)
  45.        print diferencia
  46.  
  47. # Producto escalar.
  48. elif opcion == 'e':
  49.  
  50.        producto = (x1 * x2 + y1 * y2 + z1 * z2)
  51.        print producto
  52.  
  53. # Producto vectorial.
  54. elif opcion == 'f':
  55.  
  56.        vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  57.        print vectorial
  58.  
  59. # &#193;ngulo.
  60. elif opcion == 'g':
  61.        angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  62.        print angulo
  63.  
  64. # Longitud.
  65. elif opcion == 'h':
  66.  
  67.        x = float(raw_input('Introduce valor x: '))
  68.        y = float(raw_input('Introduce valor y: '))
  69.        z = float(raw_input('Introduce valor z: '))
  70.  
  71.        longitud = sqrt(x**2+y**2+z**2)
  72.        print longitud
  73.  
  74. elif opcion == 'i':
  75.        print 'Gracias por usar el programa.'
  76.  
  77. else:
  78.        print 'Puedes teclear estas siguientes opciones: a, b, c, d, e, f, g, h o i. Usted haz tecleado', opcion
  79.  
  80.  

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
  1. # encoding: utf-8
  2.  
  3. from math import acos, pi, sqrt
  4.  
  5. opcion = ''
  6. #while opcion < 'a' or opcion > 'i':
  7. while opcion in 'abcdefghi':
  8.    print '''Selecciona una opci&#243;n:
  9.            a) Introducir el primer vector.
  10.            b) Introducir el segundo vector.
  11.            c) Calcular la suma.
  12.            d) Calcular la diferencia.
  13.            e) Calcular el producto escalar.
  14.            f) Calcular el producto vectorial.
  15.            g) Calcular el &#225;ngulo (en gastos) entre ellos.
  16.            h) Calcular la longitud.
  17.            i) Finalizar. '''
  18.  
  19.    opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  20.  
  21.    # Primer vector.
  22.    if  opcion == 'a':
  23.        x1 = float(raw_input('Introduce valor x1: '))
  24.        y1 = float(raw_input('Introduce valor y1: '))
  25.        z1 = float(raw_input('Introduce valor z1: '))
  26.        print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.'
  27.  
  28.    # Segundo vector.
  29.    elif opcion == 'b':
  30.        x2 = float(raw_input('Introduce valor x2: '))
  31.        y2 = float(raw_input('Introduce valor y2: '))
  32.        z2 = float(raw_input('Introduce valor z2: '))
  33.        print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.'
  34.  
  35.    # Suma.
  36.    elif opcion == 'c':
  37.  
  38.            suma = (x1 + x2, y1 + y2, z1 + z2)
  39.            print suma
  40.  
  41.    # Diferencia.
  42.    elif opcion == 'd':
  43.  
  44.            diferencia = (x1 - x2, y1 - y2, z1 - z2)
  45.            print diferencia
  46.  
  47.    # Producto escalar.
  48.    elif opcion == 'e':
  49.  
  50.            producto = (x1 * x2 + y1 * y2 + z1 * z2)
  51.            print producto
  52.  
  53.     # Producto vectorial.
  54.    elif opcion == 'f':
  55.  
  56.            vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  57.            print vectorial
  58.  
  59.    # &#193;ngulo.
  60.    elif opcion == 'g':
  61.            angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  62.            print angulo
  63.  
  64.    # Longitud.
  65.    elif opcion == 'h':
  66.  
  67.            x = float(raw_input('Introduce valor x: '))
  68.            y = float(raw_input('Introduce valor y: '))
  69.            z = float(raw_input('Introduce valor z: '))
  70.  
  71.            longitud = sqrt(x**2+y**2+z**2)
  72.            print longitud
  73.  
  74.    elif opcion == 'i':
  75.            print 'Gracias por usar el programa.'
  76.  
  77.    else:
  78.            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).

Código:
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'