Python菜单没有循环?

Python菜单没有循环?,python,loops,menu,Python,Loops,Menu,好吧,原谅我,这是我的第一个问题。而且,编程还是个新手 不管怎样,我一直在写一个程序来维护一个购物清单。其主要思想是,您可以添加、删除、更改、检查列表以及退出程序 但是,我的问题是,如果用户选择选项1,他们可以无限期地(按设计)这样做,但是当他们选择选项2时,当他们尝试返回选项1时,程序将停止(也类似于3返回到2或1,4返回到较低的数字) 主要方案是: import moduloListas as mod abarrotes=[] frutas=[] limpieza=[] listaTotal

好吧,原谅我,这是我的第一个问题。而且,编程还是个新手

不管怎样,我一直在写一个程序来维护一个购物清单。其主要思想是,您可以添加、删除、更改、检查列表以及退出程序

但是,我的问题是,如果用户选择选项1,他们可以无限期地(按设计)这样做,但是当他们选择选项2时,当他们尝试返回选项1时,程序将停止(也类似于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

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

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()

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

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()

当然,还有一些退出的选择……”5英尺或其他任何地方。


当然,还有一些退出的选择……”5'或其他。

这可以通过将
循环更改为来完成

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

这可以通过将
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

代码流的方式意味着,一旦移动到小于1的数字,就不能将程序流“向上”移动。再次尝试更改变量
opcion
意味着真理陈述的计算结果为false,从而打破while循环

您的代码:

while opcion=='2':
listaTotal=mod.eliminar(listaTotal)
opcion=mod.menu()
因此,更改
opcion
会打破这个循环,并移动到代码的下一部分(向下),这意味着它在向下移动数字而不是向上移动数字时似乎有效

相反,您应该使用带有
if
elif
语句的单个while循环

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

诸如此类,正如Sukrit Kalla的回答(我只是希望澄清为什么会发生这种情况)。

代码流动的方式意味着,一旦移动到一个小于一的数字,就不能“向上”移动程序流。再次尝试更改变量
opcion
意味着真理陈述的计算结果为false,从而打破while循环

您的代码:

while opcion=='2':
listaTotal=mod.eliminar(listaTotal)
opcion=mod.menu()
因此,更改
opcion
会打破这个循环,并移动到代码的下一部分(向下),这意味着它在向下移动数字而不是向上移动数字时似乎有效

相反,您应该使用带有
if
elif
语句的单个while循环

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

诸如此类,正如苏克里特·卡拉(Sukrit Kalla)的回答(我只是希望澄清为什么会发生这种情况).

您不能转到更低的数字,因为您已经通过了该测试,并且代码的其余部分中不存在此类测试。您不能转到更低的数字,因为您已经通过了该测试,并且代码的其余部分中不存在此类测试。啊……太好了。看起来很明显…不知道我怎么会错过这样的事情。非常感谢。啊……太好了。看起来很明显…不知道我怎么会错过这样的事情。非常感谢。