[Python] - Menú con While.

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

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

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Cita de: Novlucker en 15 Octubre 2010, 23:35 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.

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

@Sthéfano

Solo un pequeño dato mas :D

#
Código (python) [Seleccionar]
Importar arcoseno.
from math import acos

vector1 = float(raw_input('Introduce el primer vector: '))
vector2 = float(raw_input('Introduce el segundo vector: '))

opcion = ''
while opcion < 'a' or opcion > 'g':
    print 'Selecciona una opción: \n'
    print 'a) Calcular la suma.'
    print 'b) Calcular la diferencia.'
    print 'c) Calcular el producto escalar.'
    print 'd) Calcular el producto vectorial.'
    print 'e) Calcular el ángulo (en gastos) entre ellos.'
    print 'f) Calcular la longitud.'
    print 'g) Finalizar. '
    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
    if opcion == 'a':
        x1 = float(raw_input('Introduce el primer vector: '))


En vez de tantos print, podrias usar comillas triples.

Código (python) [Seleccionar]
# Importar arcoseno.
from math import acos

vector1 = float(raw_input('Introduce el primer vector: '))
vector2 = float(raw_input('Introduce el segundo vector: '))

opcion = ''
while opcion < 'a' or opcion > 'g':
    print '''
        Selecciona una opcion:
            a) Calcular la suma.
            b) Calcular la diferencia.
            c) Calcular el producto escalar.
            d) Calcular el producto vectorial.
            e) Calcular el ángulo (en gastos) entre ellos.
            f) Calcular la longitud.
            g) Finalizar.
    '''
    opcion = raw_input('Pulsa a, b, c, d, e, f o g, luego pulsa retorno de carro: ')
    if opcion == 'a':
        x1 = float(raw_input('Introduce el primer vector: '))


Te ahorras muchos print por hacer :P

Saludos ;)

Meta

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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker


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 ...
CitarLos 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"
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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

#17
Ya decía yo. Rectificar es de sabio.

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

Código (python) [Seleccionar]
# Introducir vectores.
vector1 = float(raw_input('Introduce el primer vector: '))
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 (python) [Seleccionar]

from math import acos, pi, sqrt

opcion = ''
while opcion < 'a' or opcion > 'i':
    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: '))
   
# 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: '))
# 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':

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

# Longitud.
elif opcion == 'h':

        x = 56
        y = 92
        z = 50

        longitud = sqrt(x**2+y**2+z**2)
        print longitud
       
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.'


¿Te refieres algo así?

Ahora mismo no lo puedo ejecutar para hacer pruebas porque me da fallos.
CitarFile "/home/user/NetBeansProjects/kam/src/kam.py", line 90
    elif opcion == 'h':
       ^
SyntaxError: invalid syntax
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

Revisa paréntesis en g :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

#19
Gracias por el error, sólo es el del paréntesis.

En su salida me ha dado este resultado.

CitarSelecciona 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 (python) [Seleccionar]
from math import acos, pi, sqrt

opcion = ''
while opcion < 'a' or opcion > 'i':
   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: '))
   
# 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: '))
# 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':
       print  (180 / pi) * arcos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))

# 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 'Sólo hay sietes opciones: a, b, c, d, e, f o g. Usted has tecleado', opcion
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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/