【问题标题】:How to go back to first if statement if no choices are valid如果没有选择有效,如何返回第一个 if 语句
【发布时间】:2012-10-10 21:34:00
【问题描述】:

如果没有正确满足条件,我如何让 Python 移动到 if 语句的顶部。

我有一个这样的基本 if/else 语句:

print "pick a number, 1 or 2"
a = int(raw_input("> ")

if a == 1:
    print "this"
if a == 2:
    print "that"
else:
   print "you have made an invalid choice, try again."

我想要的是提示用户为此 if 语句做出另一个选择,而不必重新启动整个程序,但我对 Python 非常陌生,并且在任何地方都无法在线找到答案。

【问题讨论】:

  • 你必须将整个东西包裹在一个循环中(通常是while)。
  • 那么会为我做吗?谢谢生病去研究,甚至不知道从哪里开始
  • @quantumSoup 像这样的时候,我想念 do-while 循环,不过很容易用常规的 while 循环来模拟

标签: python if-statement raw-input


【解决方案1】:

执行此操作的一种相当常见的方法是使用将无限期运行的while True 循环,并在输入有效时使用break 语句退出循环:

print "pick a number, 1 or 2"
while True:
    a = int(raw_input("> ")
    if a == 1:
        print "this"
        break
    if a == 2:
        print "that"
        break
    print "you have made an invalid choice, try again."

这里还有一个很好的方法来限制重试次数,例如:

print "pick a number, 1 or 2"
for retry in range(5):
    a = int(raw_input("> ")
    if a == 1:
        print "this"
        break
    if a == 2:
        print "that"
        break
    print "you have made an invalid choice, try again."
else:
    print "you keep making invalid choices, exiting."
    sys.exit(1)

【讨论】:

    【解决方案2】:

    你可以使用递归函数

    def chk_number(retry)
        if retry==1
            print "you have made an invalid choice, try again."
        a=int(raw_input("> "))
        if a == 1:
            return "this"
        if a == 2:
            return "that"
        else:
            return chk_number(1)
    
    print "Pick a number, 1 or 2"
    print chk_number(0)
    

    【讨论】:

      【解决方案3】:

      使用 while 循环。

      print "pick a number, 1 or 2"
      a = None
      while a not in (1, 2):
      
          a = int(raw_input("> "))
      
          if a == 1:
              print "this"
          if a == 2:
              print "that"
          else:
              print "you have made an invalid choice, try again."
      

      【讨论】:

      • 谢谢,你打败了我自己解决了这个问题,感谢帮助谢谢
      • 第 2 行中的括号是不必要的,您错过了冒号。也更容易使用while a not in (1, 2):
      • @RishabKurapati 请正确使用编辑摘要框。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多