Foros del Web » Programando para Internet » Python »

Menú con while.

Estas en el tema de Menú con while. en el foro de Python en Foros del Web. Hola: http://www.subeimagenes.com/img/menu-4530.gif Por ahora he hecho cosas pero tengo errores por todas partes. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original # Importar arcoseno, pi y raíz. ...
  #1 (permalink)  
Antiguo 15/10/2010, 00:04
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Menú con while.

Hola:

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

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


Código Python:
Ver original
  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.'




Alguna ayuda de estos errores.

Saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar

Última edición por REHome; 15/10/2010 a las 00:56
  #2 (permalink)  
Antiguo 15/10/2010, 09:10
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Linea 84 de la imagen, cuidado con los paréntesis
Linea 84 de la imagen, arcos no es una función que este en math
Linea 84 de la imagen, acos es la función que deseas usar, pero necesitas llamarla

En la opcion "g" debería de salir.

Recomendación: Da click en las tachitas de error y te mostrara cual es tu error.
  #3 (permalink)  
Antiguo 15/10/2010, 09:20
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.





__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #4 (permalink)  
Antiguo 15/10/2010, 10:07
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Linea 84 de la imagen, cuidado con los paréntesis (tienes paréntesis de mas o de menos)
Linea 84 de la imagen, arcos no es una función que este en math (cambiala por acos, tambien en el import)
Linea 84 de la imagen, acos es la función que deseas usar, pero necesitas llamarla
  #5 (permalink)  
Antiguo 15/10/2010, 10:12
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Menú con while.

Si no solucionás los errores de la línea 84, seguramente haya errores de sintaxis en cascada hacia las líneas de abajo.
  #6 (permalink)  
Antiguo 15/10/2010, 10:12
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Cita:
Iniciado por razpeitia Ver Mensaje
Linea 84 de la imagen, cuidado con los paréntesis (tienes paréntesis de mas o de menos)

print (180 / pi) * arcos * ((x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * (sqrt(x2**2 + y2**2 + z2**2))

Linea 84 de la imagen, arcos no es una función que este en math (cambiala por acos, tambien en el import)

Hecho. En el programa más abajo puse arcos. ¿También es acos?

Linea 84 de la imagen, acos es la función que deseas usar, pero necesitas llamarla
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #7 (permalink)  
Antiguo 15/10/2010, 10:21
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Cita:
Iniciado por REHome
Hecho. En el programa más abajo puse arcos. ¿También es acos?
Pero claro que si. A poco con sqrt lo mandas a llamar de forma diferente?

acos es una función tal como sqrt, así que también tienes que llamarla.
Ejemplo:
Código Python:
Ver original
  1. acos * 3 #Error
  2. acos(3) #Error fuera del dominio
  3. acos(1) #0.0
  4. #dominio entre -1 y 1
  #8 (permalink)  
Antiguo 15/10/2010, 10:29
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Me he dado cuenta de una cosa. Hay que usar dos vectores y esto suena a for in [3, 5, 6, 9,] por poner ejemplos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #9 (permalink)  
Antiguo 15/10/2010, 10:38
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Tal vez deberías un poco sobre vectores y sus operaciones antes de empezar a programarlo.

Todo lo que hace un while lo puede hacer un for y viceversa.
  #10 (permalink)  
Antiguo 15/10/2010, 20:44
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

El código aún no está completo.

Código Python:
Ver original
  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.'

Resultado es este.

Código:
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.
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.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #11 (permalink)  
Antiguo 15/10/2010, 21:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Código Python:
Ver original
  1. while opcion < 'a' or opcion > 'i'
entonces opcion toma valores menores a 'a' o mayores a 'i' pero no en un rango de 'a' a 'i'

En este caso yo haría un:
Código Python:
Ver original
  1. while opcion in "abcdefghi":
Mucho mas fácil de leer.

Edito prueba la opcion 'g'
  #12 (permalink)  
Antiguo 15/10/2010, 21:14
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Lo he hecho pero siempre va al menú directamente. Si pulso a) no me pide datos que quiero que me pida. Algo no funciona.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #13 (permalink)  
Antiguo 15/10/2010, 21:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

La identacion de tu programa:
Código Python:
Ver original
  1. from math import acos, pi, sqrt
  2.  
  3. opcion = ''
  4. while opcion in "abcdefghi":
  5.     print '''Selecciona una opcion:
  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 angulo (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.     # Angulo.
  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 'Solo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  69.     print 'Gracias por usar el programa.'
  #14 (permalink)  
Antiguo 15/10/2010, 22:16
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Funciona con tu código, no con el mio.

Código Python:
Ver original
  1. while opcion in "abcdefghi":

¿Por qué?

Sigo probando que hay fallos.

En la g) me da este error:
Código:
Traceback (most recent call last):
  File "/home/user/NetBeansProjects/kam/src/kam.py", line 87, in <module>
    print  (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'
Cuando se pulsa la i), debe finalizar el programa que debe mostrar 'Gracias por usar el programa.'

Todas las demás opciones funciona por ahora.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #15 (permalink)  
Antiguo 15/10/2010, 22:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Tu while iteraba mientras opcion sea menor a 'a' ó mayor a 'i' asi que solo servia para el primer caso.

Lo que tu quieres es que itere mientras opcion este entre 'a' e 'i' o sea que sea mayor o igual a 'a' y que sea menor o igual a 'i'

En la opción "g" como te dice hace varios post arriba debes llamar a acos (ya que es una función)
En la opción "i" nunca le dices a tu programa que se salga del while (lo puedes hacer con un break, si no te lo han enseñado)
  #16 (permalink)  
Antiguo 15/10/2010, 22:48
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Pues no, no he llegado con el break, ahor afunciona el break. jeje.

Lo único que no me funciona es esto.

Código Python:
Ver original
  1. from math import acos, pi, sqrt
  2.  
  3.  
  4.  # Ángulo.
  5.     elif opcion == 'g':
  6.             angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  7.             print angulo

Por supuesto que aunque corrija el acos me faltan pulir cosas, por ejemplo. No puedo ejecutar d la c) a la h) si no he introducido los valores que piden a) y b). Cuando solucione el famoso acos que me tiene negro y no te he entendido seguiré.




Por ahora el código es así:
Código Python:
Ver original
  1. from math import acos, pi, sqrt
  2.  
  3. opcion = ''
  4. while opcion >= 'a' or opcion <= 'i':
  5. #while opcion in 'abcdefghi':
  6.     print '''Selecciona una opción:
  7.            a) Introducir el primer vector.
  8.            b) Introducir el segundo vector.
  9.            c) Calcular la suma.
  10.            d) Calcular la diferencia.
  11.            e) Calcular el producto escalar.
  12.            f) Calcular el producto vectorial.
  13.            g) Calcular el ángulo (en gastos) entre ellos.
  14.            h) Calcular la longitud.
  15.            i) Finalizar. '''
  16.            
  17.     opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  18.    
  19.     # Primer vector.
  20.     if  opcion == 'a':
  21.         x1 = float(raw_input('Introduce valor x1: '))
  22.         y1 = float(raw_input('Introduce valor y1: '))
  23.         z1 = float(raw_input('Introduce valor z1: '))
  24.  
  25.     # Segundo vector.
  26.     elif opcion == 'b':
  27.         x2 = float(raw_input('Introduce valor x2: '))
  28.         y2 = float(raw_input('Introduce valor y2: '))
  29.         z2 = float(raw_input('Introduce valor z2: '))
  30.     # Suma.
  31.     elif opcion == 'c':
  32.  
  33.             suma = (x1 + x2, y1 + y2, z1 + z2)
  34.             print suma
  35.  
  36.     # Diferencia.
  37.     elif opcion == 'd':
  38.  
  39.             diferencia = (x1 - x2, y1 - y2, z1 - z2)
  40.             print diferencia
  41.  
  42.     # Producto escalar.
  43.     elif opcion == 'e':
  44.  
  45.             producto = (x1 * x2 + y1 * y2 + z1 * z2)
  46.             print producto
  47.  
  48.      # Producto vectorial.
  49.     elif opcion == 'f':
  50.  
  51.             vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  52.             print vectorial
  53.  
  54.     # Ángulo.
  55.     elif opcion == 'g':
  56.             angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  57.             print angulo
  58.     # Longitud.
  59.     elif opcion == 'h':
  60.  
  61.             x = float(raw_input('Introduce valor x: '))
  62.             y = float(raw_input('Introduce valor y: '))
  63.             z = float(raw_input('Introduce valor z: '))
  64.  
  65.             longitud = sqrt(x**2+y**2+z**2)
  66.             print longitud
  67.  
  68.     elif opcion == 'i':
  69.             print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
  70.             break
  71. print 'Gracias por usar el programa.'
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #17 (permalink)  
Antiguo 15/10/2010, 23:00
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Si pongo 'A' o 'jfdafkajdfa' va entrar también en el ciclo.
En ese caso tu estas aceptando cualquier valor.

Mientras opcion >= 'a' O opcion <= 'i' #Aqui entra cualquier cosa que le pongas
  #18 (permalink)  
Antiguo 15/10/2010, 23:02
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Mejor así:

Código Python:
Ver original
  1. while opcion <= 'a' or opcion >= 'i':

Ya decía yo que me daba cosas raras.
http://www.computerhope.com/jargon/a/ascii.htm

Saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #19 (permalink)  
Antiguo 15/10/2010, 23:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Piénsalo mejor, ese while solo jalara una vez.
  #20 (permalink)  
Antiguo 15/10/2010, 23:09
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Mejor hago tu truco, funciona mejor, aunque en el PDF no dice nada del while in.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #21 (permalink)  
Antiguo 15/10/2010, 23:13
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Puedes hacerlo a tu manera, pero tienes que ser cuidadoso en la condición del while y el valor inicial de op.

Te daría el código pero no quiero matar tu creatividad, por eso solo te doy pistas o pseudo-código.
  #22 (permalink)  
Antiguo 15/10/2010, 23:14
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Lo que me falla una cosa es que si pulso cualquier valor que no sea desde a a hasta la i, que me salga este mensaje.

Código Python:
Ver original
  1. print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion

Lo que hace es salir del programa directamente.

Todavía no me des el código, me cuesta, pero se que aprendo a base de palos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #23 (permalink)  
Antiguo 15/10/2010, 23:23
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Código Python:
Ver original
  1. if x == 10:
  2.     print "Soy 10"
  3. elif x == 5:
  4.     print "Soy 5"
  5. else:
  6.     print "Soy otra cosa diferente de 5 o 10"
  #24 (permalink)  
Antiguo 15/10/2010, 23:46
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Pillo lo que al final hay que puslsar else:.

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

Hay una cosa que pasa. Cuando pulso z) por poner un ejemplo, me sale este mensaje que es el correcto pero de ahí no sale y parece que el programa se bloqueó.

Código Python:
Ver original
  1. print 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion

PD: Todavía el g) me da la tabarra y eso que puse * en import.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #25 (permalink)  
Antiguo 16/10/2010, 02:06
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Menú con while.

Cita:
Iniciado por razpeitia Ver Mensaje

En la opción "g" como te dice hace varios post arriba debes llamar a acos (ya que es una función)

¿Acaso no estoy llamando a acos arriba en import y abajo?


Código Python:
Ver original
  1. from math import acos, pi, sqrt
  2.  
  3.  
  4. angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  5.             print angulo

¿Se me escapa algo?
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #26 (permalink)  
Antiguo 16/10/2010, 07:33
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Menú con while.

Desde hace varios post, que yo lo veo bien claro y nota que no dije que tienes errores al importar la función. Si no que tienes errores al llamarla.

Si estas usando sqrt para sacar raíz por que haces:
Código Python:
Ver original
  1. sqrt(4) #Esto esta bien, nota esto es llamar a una funcion
  2. #En vez de
  3. sqrt * 4 #Esto es un error

Lo mismo estas haciendo con acos no estas llamando a la función.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:22.