【问题标题】:While loop with multiple conditions in python在python中具有多个条件的while循环
【发布时间】:2015-02-14 05:07:28
【问题描述】:
weatherType = raw_input('Enter a weather type: ')

while (weatherType != "WINDDIRECTION") or (weatherType != "WINDSPEED") or (weatherType != "AIRTEMPERATURE") or (weatherType != "WAVEHEIGHT") or (weatherType != "AIRPRESSURE"):
    print "Sorry, invalid input. Please enter AIRTEMPERATURE, AIRPRESSURE, WAVEHEIGHT, WINDSPEED, or WINDDIRECTION  for a city and either WINDDIRECTION, WINDSPEED, or AIRTEMPERATURE for an off shore bouy"
    weatherType = raw_input('Enter a weather type: ')

好的,通过这个循环,我试图让用户输入WINDDIRECTION、WINDSPEED、AIRTEMPERATURE、WAVEHEIGHT 或AIRPRESSURE。但是,即使用户输入了这 5 个选项中的 1 个,我的代码仍然会进入 while 循环。我不知道发生了什么事。 我知道我可以使用 for 循环(for x in ["WINDDIRECTION", ....])但是 for 循环只能查看他们的输入第一次是否正确以及他们是否再次输入错误的答案代码将继续

【问题讨论】:

    标签: python while-loop multiple-conditions


    【解决方案1】:

    您的代码继续进入循环,因为您期望“weatherType”变量获取您的预定义值之一(“WINDDIRECTION”等)。但是,无论用户提供的输入是什么,WHILE 条件总是会得到满足(因为 'weatherType' 一次只有一个值,它会匹配 while 'or' 条件,因此进入循环)。

    或者,您可以创建一个包含所有选项 ['WINDDIRECTION'、'' 等] 的列表,并检查用户输入是否在您的列表中。

    例子:

    options = ["WINDDIRECTION", "WINDSPEED", "AIRTEMPERATURE", "WAVEHEIGHT", "WAVEHEIGHT"]
    
    message = '''Sorry, invalid input. Please enter:
    AIRTEMPERATURE, AIRPRESSURE,
    WAVEHEIGHT, WINDSPEED, or WINDDIRECTION  for a city and either
    WINDDIRECTION, WINDSPEED, or AIRTEMPERATURE for an off shore bouy
    '''
    
    weatherType = raw_input('Enter a weather type: ')
    
    while weatherType not in options:
        print message
        weatherType = raw_input('Enter a weather type: ')
    

    【讨论】:

      【解决方案2】:

      除了李丹尼尔克罗克。

      查看面料包。有很好的工具来管理控制台输入。

      from fabric.contrib import console
      
      def validate(v):
          answers = ['WINDDIRECTION',...]
          if v in answers:
              return int(v)
      
      question = 'Enter a weather type: '
      
      console_prompt = console.prompt(question, default="WINDDIRECTION", validate=validate)
      

      【讨论】:

        【解决方案3】:
        (x != y) or (x != z) ...
        

        将始终为真。由于您使用的是 Python,因此我建议您改用 in:

        if x in ['a', 'b', 'c']:
        

        【讨论】:

        • 请注意,在较新版本的 Python(即 3.3 及更高版本)中,您应该使用一组值:if x in {'a', 'b', 'c'}:。集合文字被解释器识别为常量,因此它们更有效。当然,这对 OP 来说没有任何意义,因为他使用的是 Python 2.x。
        • 但是如果他们再次输入错误答案怎么办?我不确定如何重置 for 循环
        • while x not in... 您也可以先将x 设置为None,这样测试第一次会失败,您不需要两个输入语句。
        猜你喜欢
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 2011-11-02
        • 2014-12-22
        • 2013-09-29
        • 2013-08-07
        相关资源
        最近更新 更多