【问题标题】:Python - Checking for an empty input + script troublesPython - 检查空输入+脚本问题
【发布时间】:2015-09-16 00:10:21
【问题描述】:

我对 Python 非常了解,所以不出所料,我在编写脚本时经常遇到问题,并且通常不知道如何解决这些问题。

我正在制作一个小游戏,您可以在其中尝试猜测程序随机选择的数字。我已经走了很远,但我注意到当我什么都不输入时,程序只是显示了一条错误消息。我希望程序显示文本“输入数字”。在这种情况下,然后再次提示“你的猜测:”输入,但经过大量研究,我真的不确定如何在我的代码中成功实现该功能。具体来说,我的问题是“尝试和排除”部分 - 我真的不知道如何正确编写它们,但我在这里看到另一篇文章建议使用它们。

import random

def question():
    print("Guess a number between 1 and 100.")
    randomNumber = random.randint(1, 100)
    found = False

    while not found:
        myNumber = int(input("Your guess: "), 10)
        try:
            myNumber = int(input("Your guess: "), 10)
        except ValueError:
            print("Enter a number.")

        if myNumber == randomNumber:
            print("Correct!")
            found = True
        elif myNumber > randomNumber:
            print("Wrong, guess lower!")
        else:
            print("Wrong, guess higher!")

question()

您应该能够在我编写的代码中看到我的意图,谢谢。

【问题讨论】:

    标签: python integer try-catch except


    【解决方案1】:

    你几乎是对的。处理完异常后继续下一次迭代。

    import random
    
    def question():
        print("Guess a number between 1 and 100.")
        randomNumber = random.randint(1, 100)
        found = False
    
        while not found:
            try: 
                myNumber = int(input("Your guess: "), 10)
            except Exception:
                print('Enter a number.')
                continue
    
            if myNumber == randomNumber:
                print("Correct!")
                found = True
            elif myNumber > randomNumber:
                print("Wrong, guess lower!")
            else:
                print("Wrong, guess higher!")
    
    question()
    

    【讨论】:

    • 亚历山大打败了我。我要补充一点,您可能需要捕获其他异常(例如SyntaxError)来处理输入空行时的情况。你可以做类似except (ValueError, SyntaxError): 的事情。或者为了安全起见,您可以使用except Exception: 捕获任何异常。
    • 我同意这里。在这种情况下,使用except Exception 捕获所有异常可能会更好。编辑答案。
    • 你知道,提问者在 python 3 上。所以使用input() 而不是raw_input() :)
    • 非常感谢!这真是令人沮丧,不敢相信修复如此简单。另外,您提到使用SyntaxError(或Exception)来处理输入空行时的情况。但是,同时使用ValueErrorSyntaxError/Exception,程序以相同的方式处理输入空行(通过遵循continue 语句)。这是为什么呢?
    • 如果捕捉到Exception,程序会以相同的方式处理所有异常,因为ExceptionValueErrorSyntaxError 的超类,所以无论你准确捕捉到哪种类型的异常,它们都是Exception 类。在实际代码中,您不应该使用通用的Exception 类型,因为您可能希望以不同的方式处理不同的错误,但如果我们不想一次捕获所有异常,它就可以正常工作。
    【解决方案2】:

    你可以这样写一个函数:

    def input_num(input_string):
        """ This function collects user input
    
        Args:
            input_string: message for user
    
        Return:
            user_input: returns user_input if it is a digit
        """
    
        user_input = raw_input("{}: ".format(input_string))
        if not user_input.isdigit():
            input_num(input_string)
        return int(user_input)
    

    然后调用这个函数

    user_num = input_num("Enter a number")
    

    它会一直要求用户提供有效的输入,直到用户输入一个

    【讨论】:

      【解决方案3】:

      我很困惑你为什么要输入两次。您只需要要求他们输入一次。之后,您需要在 except 语句中添加 continue 。否则,它不会重复,只是结束程序。这就是您修改后的 while 循环的样子。

      while not found:
          try:
              myNumber = int(input("Your guess: "), 10)
          except ValueError:
              print("Enter a number.")
              continue
      
          if myNumber == randomNumber:
              print("Correct!")
              found = True
          elif myNumber > randomNumber:
              print("Wrong, guess lower!")
          else:
              print("Wrong, guess higher!")
      

      【讨论】:

        【解决方案4】:

        只需在 except 中使用 continue 关键字即可继续循环。

        except ValueError: print('Enter a number') continue

        【讨论】:

          猜你喜欢
          • 2021-11-21
          • 2013-05-16
          • 2018-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-25
          相关资源
          最近更新 更多