1

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

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

我几乎可以正常工作,但是,我的问题是,如果用户选择例如选项 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

4 回答 4

2

这可以通过将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
于 2013-04-25T19:19:00.933 回答
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()
于 2013-04-25T19:15:46.423 回答
1

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

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

于 2013-04-25T19:16:02.510 回答
1

你的代码流动的方式意味着一旦你移动到一个小于一的数字,你就不能向后“向上”移动程序流。再次尝试更改变量opcion意味着真值语句被评估为假,从而中断了 while 循环。

你的代码:

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

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

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

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

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

于 2013-04-25T19:48:22.613 回答