He hecho algunas modificaciones.
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.
# 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'