【问题标题】:else & elif statements not working in Pythonelse 和 elif 语句在 Python 中不起作用
【发布时间】:2011-10-24 22:09:27
【问题描述】:

我是 Python 新手,目前正在学习控制流命令,如 if、else 等。

if 语句工作正常,但是当我编写else 或elif 命令时,解释器给了我一个语法错误。我使用的是 Python 3.2.1,问题出在它的本机解释器和 IDLE 中。

我正在按照 'A Byte Of Python' 书中的说明进行操作。如您所见,elif 和 else 给出了无效语法。

>> number=23
>> guess = input('Enter a number : ')
>> if guess == number:
>>    print('Congratulations! You guessed it.')
>> elif guess < number:
   **( It is giving me 'Invalid Syntax')**
>> else:
   **( It is also giving me 'Invalid syntax')**

为什么会这样?我在 IDLE 和交互式 python 中都遇到了问题。我希望语法是正确的。

【问题讨论】:

  • 语法对我来说是正确的。您是在交互式 Python shell 中输入此内容,还是将其保存在文件中?您可以粘贴未修改的脚本或交互式会话记录吗?
  • elif/else 是空的吗?如果是 sou,请添加 pass。
  • 您能否粘贴您的 REPL 会话的 实际 完整输出?如果您不将实际输出替换为“(It is given in 'Invalid Syntax')”之类的内容,人们会更容易看到您的问题。
  • 请注意,guess 将是 str() 类型的实例,而 number 是 int() 类型的实例。根据您的 Python 版本,将两者与除等式或不等式运算符之外的任何操作进行比较时,可能会或可能不会被解释为类型不安全的操作。

标签: python


【解决方案1】:

您似乎在if 语句的正文后输入了一个空行。这是交互式编译器的提示,您已完全完成了该块,因此它不期望任何 elif/else 块。尝试完全像这样输入代码,并且只在每行后按回车 一次:

if guess == number:
    print('Congratulations! You guessed it.')
elif guess < number:
    pass # Your code here
else:
    pass # Your code here

【讨论】:

  • 谢谢!它解决了我的问题。 :) 我的书中没有给出你要说的内容。
  • 对于此类测试,将所有内容写入文本文件并使用“python mytest.py”运行它会更容易
  • @jayantr7:没问题。请注意,如果您将其输入到文件中并通过 python 运行它(正如西蒙建议的那样),额外的换行符不会有问题;这是交互式解释器独有的问题。
  • 谢谢,我已经删除了 elif 之前的 from 语句现在可以正常工作了。
【解决方案2】:

问题是您在else 或elif 之前输入的空白​​行。注意给你的提示。如果是&gt;&gt;&gt;,那么 Python 期待新语句的开始。如果是...,那么它期待你继续之前的声明。

【讨论】:

    【解决方案3】:

    elif 和 else 必须立即跟在 if 块的末尾,否则 Python 将假定该块在没有它们的情况下关闭。

    if 1:
        pass
                 <--- this line must be indented at the same level as the `pass`
    else:
        pass
    

    在您的代码中,解释器在缩进时完成 if 块,因此 elif 和 else 不与之关联。因此它们被理解为独立的陈述,这是没有意义的。


    一般情况下,请尝试遵循style guidelines,其中包括删除过多的空格。

    【讨论】:

      【解决方案4】:

      在 IDLE 和交互式 python 中,您输入了两个连续的 CRLF,这使您脱离了 if 语句。 这是IDLE或交互式python的问题。使用任何类型的编辑器都可以,只要确保缩进正确即可。

      【讨论】:

        【解决方案5】:
         if guess == number:
             print ("Good")
         elif guess == 2:
             print ("Bad")
         else:
             print ("Also bad")
        

        确保您的身份正确。语法没问题。

        【讨论】:

          【解决方案6】:

          请记住,默认情况下,输入的返回值将是字符串而不是整数。您不能将字符串与诸如 、=>、

          number = 23
          guess = int(input('Enter a number: '))  # The var guess will be an integer
          
          if guess == number:
              print('Congratulations! You guessed it.')
          
          elif guess != number:
              print('Wrong Number')
          

          【讨论】:

            【解决方案7】:

            此外,您的缩进是错误的。该代码将无法正常工作。 我知道你正在使用 python 3. 的东西。 我正在使用 python 2.7.3 实际适用于您尝试完成的代码是这样的。

            number = str(23)
            guess =  input('Enter a number: ')
            if guess == number:
               print('Congratulations! You guessed it.')
            elif guess < number:
                 print('Wrong Number')
            elif guess < number:
                 print("Wrong Number')
            

            我要告诉 python 的唯一区别是数字是代码工作的字符串。如果不是,则认为是整数。当有人运行代码时,他们输入的是字符串而不是整数。有很多方法可以更改此代码,但这是我想提供的简单解决方案,如果不将 23 转换为字符串,我无法想到另一种方法。或者你可以用 "23" 加引号或者你可以在输入中使用 int() 函数。这会将他们输入的任何内容转换为整数。

            【讨论】:

              【解决方案8】:

              即使“elif”块的标识与“if”块标识不匹配(第一个为制表符,第二个为空格,反之亦然),Python 也会生成相同的“无效语法”错误。

              【讨论】:

                【解决方案9】:

                缩进在 Python 中很重要。您的 if else 语句应该在三箭头 (>>>) 内,在 Mac python IDLE 版本 3.7.4 中,当您进入下一行时,elif 语句没有正确的缩进,您必须向左移动以避免语法错误。

                【讨论】:

                  猜你喜欢
                  • 2017-07-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-07
                  • 2017-02-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-03
                  相关资源
                  最近更新 更多