【问题标题】:I have a loop i can't end on python我有一个循环,我无法在 python 上结束
【发布时间】:2019-05-24 01:28:05
【问题描述】:

我一直在为我参加的一门课程编写一些 Python 代码,但我遇到了无法结束的循环问题。我不知道它来自哪里。

我试图在每个“elif”上打断,但这不是我想要的,因为我不希望它在“else”之后立即结束。不过我不介意其他选项。

我也尝试过使用“return”,但也许我做错了什么,因为我无法让它工作

from lxml import etree

doc = etree.parse('Paises_XML.xml')
raiz=doc.getroot()
paises=doc.findall("pais")

print("DATOS SOBRE HABITANTES EN CADA PAIS")
print("""
    1- España
    2- Irán
    3- Alemania
    4- EEUU
    5- Libano
    6- Madagascar
    7- Salir
    """)

eleccion=input("Introduzca un número referente a un país de la lista observable: ")

while True:

    if eleccion== "1":
        print("")
        print (paises[0].find("nombre").text)
        print (paises[0].find("habitantes").text)

    elif eleccion== "2":
        print("")
        print (paises[1].find("nombre").text)
        print (paises[1].find("habitantes").text)

    elif eleccion== "3":
        print("")
        print (paises[2].find("nombre").text)
        print (paises[2].find("habitantes").text)

    elif eleccion== "4":
        print("")
        print (paises[3].find("nombre").text)
        print (paises[3].find("habitantes").text)

    elif eleccion== "5":
        print("")
        print (paises[4].find("nombre").text)
        print (paises[4].find("habitantes").text)

    elif eleccion== "6":
        print("")
        print (paises[5].find("nombre").text)
        print (paises[5].find("habitantes").text)


    elif eleccion== "7":
        print("")
        print("¡Hasta pronto!")
        break
    else:
        print ("Opción no válida, elija un número del 1 al 6 para mostrar la información del país correspondiente")

我只是希望它不会循环,我认为其他一切都很酷。 我还想实现一个选项,它可以显示我正在执行的每个查询,比如将它们全部收集在一起,但我认为这是创建循环的原因,所以我删除了它。

【问题讨论】:

  • 您希望程序仅在用户输入7 时退出并继续重复,还是仅在用户输入1 到7 以外的内容时才重复?用非技术术语来说,你想要的行为是什么?
  • eleccion=input("... ") 应该在 while 循环内
  • @Henry。你为什么删除你的答案?非常好。
  • 它实际上很好,它使我的代码更短,我可以让它按我的预期工作,再次发布它,我会投票 :)) @HenryWoody
  • @victorsionado 以为我回答错了问题,但我会取消删除它

标签: python xml


【解决方案1】:

eleccion 的值在您的 while 循环内没有改变,请将您的输入语句移到您的 while 语句之后并重试。

【讨论】:

    【解决方案2】:

    只要用户输入有效命令,您似乎就想继续循环。您可以通过在循环内移动 input 行,然后将 break 语句添加到 else 条件来做到这一点。

    例如:

    while True:
        eleccion=input("Introduzca un número referente a un país de la lista observable: ")
    
        if eleccion == "1":
            # handle
        # ...
        else:
            print("Opción no válida, elija un número del 1 al 6 para mostrar la información del país correspondiente")
            break
    

    此外,很多代码看起来都可以压缩,因为除了使用的索引之外,每种情况似乎都几乎相同,但可以从输入的命令中得出。

    例如,我们可以这样做:

    valid_choices = ["1", "2", "3", "4", "5", "6"]
    
    while True:
        eleccion=input("Introduzca un número referente a un país de la lista observable: ")
    
        if eleccion in valid_choices:
            index = int(eleccion) - 1
            print("")
            print (paises[index].find("nombre").text)
            print (paises[index].find("habitantes").text)
        elif eleccion == "7":
            print("")
            print("¡Hasta pronto!")
            break
        else:
            print("Opción no válida, elija un número del 1 al 6 para mostrar la información del país correspondiente")
            break
    

    【讨论】:

    • 这完全成功了!非常感谢您的时间和精力!!
    • @victorsionado 你怎么改变了批准的答案?
    【解决方案3】:

    我明白了,也许你可以给一些变量布尔值并使该变量成为阈值循环以停止该循环,例如:

    threshold = True 
    while threshold: 
        if something:
        threshold = False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2019-03-15
      • 2017-04-03
      • 1970-01-01
      相关资源
      最近更新 更多