Python菜单没有循环?

时间:2013-04-25 19:10:37

标签: python loops menu

好的,原谅我,这是我的第一个问题。此外,还是编程新手。

无论如何,我一直在编写一个维护杂货清单的程序。主要想法是您可以添加杂货,删除它们,更改它们,检查列表并退出程序。

我几乎所有的东西都在工作,但是,我的问题是,如果用户选择,例如,选项1,他们可以无限期地(按设计)这样做,但是当他们转到选项2时,程序将在他们尝试回到选项一(也可以类似于3回到2或1和4到更低的数字)。

主要计划是:

import moduloListas as mod
abarrotes=[]
frutas=[]
limpieza=[]
listaTotal=[abarrotes,frutas,limpieza]



opcion=mod.menu()

while opcion=='1':
    listaTotal=mod.ingresar(listaTotal)
    opcion=mod.menu()


while opcion=='2':
    listaTotal=mod.eliminar(listaTotal)
    opcion=mod.menu()



while opcion=='3':
    listaTotal=mod.cambiar(listaTotal)
    opcion=mod.menu()


while opcion=='4':
    print "\nAbarrotes: ",listaTotal[0]
    print "\nFrutas:    ",listaTotal[1]
    print "\nLimpieza:  ",listaTotal[2]
    opcion=mod.menu()

,菜单为:

def menu():
    print "___....----Menu Principal----....___"
    print "1.    Ingresar un articulo"
    print "2.    Eliminar un articulo"
    print "3.    Cambiar un articulo"
    print "4. Mostrar las listas de articulos"
    print "5.     Salir de Programa"
    print "\n"
    posibles=['1','2','3','4','5']
    opcion=raw_input("Por favor hacer una seleccion: ")
    while opcion not in posibles:
        print "Por favor, solo ingresa 1,2,3,4 o 5"
        opcion=raw_input("Por favor hacer una seleccion: ")
    return opcion

4 个答案:

答案 0 :(得分:1)

尝试将第一个代码块更改为以下内容:

import moduloListas as mod
abarrotes = []
frutas = []
limpieza = []
listaTotal = [abarrotes, frutas, limpieza]

opcion = mod.menu()
while opcion != '5':
    if opcion == '1':
        listaTotal = mod.ingresar(listaTotal)
    elif opcion == '2':
        listaTotal = mod.eliminar(listaTotal)
    elif opcion == '3':
        listaTotal = mod.cambiar(listaTotal)
    elif opcion == '4':
        print "\nAbarrotes: ", listaTotal[0]
        print "\nFrutas:    ", listaTotal[1]
        print "\nLimpieza:  ", listaTotal[2]
    opcion = mod.menu()

答案 1 :(得分:1)

这可以通过将while循环更改为。

来完成
while True:
    opcion=mod.menu()
    if opcion=='1':
        listaTotal=mod.ingresar(listaTotal)
    elif opcion=='2':
        listaTotal=mod.eliminar(listaTotal)
    elif opcion=='3':
        listaTotal=mod.cambiar(listaTotal)
    elif opcion=='4':
        print "\nAbarrotes: ",listaTotal[0]
        print "\nFrutas:    ",listaTotal[1]
        print "\nLimpieza:  ",listaTotal[2]
    else:
        break

答案 2 :(得分:0)

DO

while True:
    if opcion == '1':
        ...
    if opcion=='4':
       ....
    opcion = input()

然后当然,必须有一些退出选项......'5'或其他什么。

答案 3 :(得分:0)

代码流的方式意味着一旦移动到低于1的数字,就无法向上移动程序流。尝试再次更改变量opcion意味着将真值语句评估为false,从而打破while循环。

您的代码:

while opcion=='2':
listaTotal=mod.eliminar(listaTotal)
opcion=mod.menu()

因此,更改opcion会中断该循环并移至代码的下一部分(向下),这意味着在向下移动数字但不向上移动时似乎有效。

相反,您应该使用包含ifelif语句的单个while循环。

while True:
    opcion = mod.menu()
    if "1" in opcion:
        listaTotal=mod.ingresar(listaTotal)
    ...

依此类推,就像在Sukrit Kalra的回答中一样(我只是想澄清为什么会这样)。