【问题标题】:Python "expected an indented block"Python“期望一个缩进块”
【发布时间】:2011-08-01 16:25:06
【问题描述】:

首先让我说我对编程完全陌生。我最近刚开始使用 Python,它总是以一个反复出现的错误让我大吃一惊——“预期有一个缩进块” 现在,我知道还有其他几个线程可以解决这个问题,并且我已经查看了很多线程,但是,即使检查我的缩进也没有给我更好的结果。我已经用 4 个空格替换了所有缩进,甚至多次重写了代码。我将发布我得到的这个计数器作业作为示例。

option == 1
while option != 0:
    print "MENU"
    option = input()
    print "please make a selection"
    print "1. count"
    print "0. quit"
    if option == 1:
        while option != 0:
            print "1. count up"
            print "2. count down"
            print "0. go back"
            if option == 1:
                print "please enter a number"
                for x in range(1, x, 1):
                    print x
                elif option == 2:
                    print "please enter a number"
                    for x in range(x, 1, 1):
                elif option == 0:
                    break
                else:
                    print "invalid command"
    elif option == 0:
        break

【问题讨论】:

  • 您能否编辑您的帖子并给我们带有行号的原始错误消息:-)

标签: python


【解决方案1】:

elif option == 2: 开始,您缩进了太多次。在一个不错的文本编辑器中,您应该能够突出显示这些行并按 Shift+Tab 来解决问题。

另外,for x in range(x, 1, 1): 后面没有声明。在for 循环中插入缩进的pass 以不执行任何操作。

另外,在第一行,你写了option == 1== 测试相等性,但您的意思是 =(单个等号),它将右侧值分配给左侧名称,即

option = 1

【讨论】:

  • vim 是一个不错的编辑器,但是击键是[Ctrl]-[<](在视觉模式下,在普通模式下预先添加一个动作)
  • 谢谢!这很有帮助。但是现在当我尝试运行我的程序时,它不喜欢 option == 1option 未定义
  • @Zach 你的意思是在第一行写option = 1 而不是option == 1,不是吗?更新了答案。
  • +1 这对我有用 .. 在我遇到错误的地方,在那条线上,我刚刚应用了 SHIFT+TAB,它就像魅力 (y) 一样工作
【解决方案2】:

在python中......意图很重要,例如:

if a==1:
    print("hey")

if a==2:
   print("bye")

print("all the best")

在这种情况下,如果两个条件中的任何一个执行,就会打印“所有最好的”,但如果它本来是这样的

if a==2:
   print("bye")
   print("all the best")

那么只有当 a==2 时才会打印“all the best”

【讨论】:

    【解决方案3】:

    您的for 循环没有循环体:

    elif option == 2:
        print "please enter a number"
        for x in range(x, 1, 1):
    elif option == 0:
    

    实际上,整个if option == 1: 块都有缩进问题。 elif option == 2: 应与 if 语句处于同一级别。

    【讨论】:

      【解决方案4】:

      有几个问题:

      1. elif option == 2: 和随后的elif-else 应与第二个if option == 1 对齐,而不是与for 对齐。

      2. for x in range(x, 1, 1): 缺少正文。

      3. 由于“选项1(计数)”需要第二次输入,您需要第二次调用input()。但是,为了理智,我敦促您将结果存储在第二个变量中,而不是重新利用 option

      4. 代码第一行中的比较可能是一个赋值。

      一旦你能够运行你的代码,你会发现更多的问题(你需要更多的 input() 调用,range() 调用之一需要注意等等)。

      最后,请不要使用与循环变量相同的变量以及作为初始/终止条件的一部分,如:

                  for x in range(1, x, 1):
                      print x
      

      它可能有效,但阅读起来非常混乱。给循环变量一个不同的名字:

                  for i in range(1, x, 1):
                      print i
      

      【讨论】:

        【解决方案5】:

        您最后的for 语句缺少正文。

        Python 期望缩进的块跟在 for 后面,或者在冒号后面有内容。

        第一种样式更常见,所以它表示它需要一些缩进的代码来跟随它。您在同一缩进级别上有一个 elif

        【讨论】:

          【解决方案6】:

          至少这个是错的:

                      for x in range(x, 1, 1):
                  elif option == 0:
          

          【讨论】:

            【解决方案7】:
            #option = 1
            #while option != 0:
            
            print ("MENU")
            print("please make a selection")
            print("1. count")
            print("0. quit")
            option = int(input("MAKE Your Selection  "))
            if option == 1:
                print("1. count up")
                print("2. count down")
                print("0. go back")
                option = int(input("MAKE Your Selection  "))
                if option == 1:
                    x = int(input("please enter a number   "))
                    for x in range(1, x, 1):
                        print (x)
            
                elif option == 2:
                    x = int(input("please enter a number   "))
                    for x in range(x, 0, -1):
                        print (x) 
                elif option == 0:
                    print("hi")
                else:
                    print("invalid command")
            else:
                print ("H!111")
            _________________________________________________________________________
            
            
            You can try this code! It works.
            

            【讨论】:

              【解决方案8】:

              循环体是缩进的:缩进是 Python 对语句进行分组的方式。在交互式提示下,您必须为每个缩进的行键入一个制表符或空格。在实践中,您将使用文本编辑器为 Python 准备更复杂的输入;所有体面的文本编辑器都有自动缩进功能。当以交互方式输入复合语句时,必须在其后跟一个空行以指示完成(因为解析器无法猜测您何时键入了最后一行)。请注意,基本块中的每一行必须缩进相同的数量。

              src: ##

              ##https://docs.python.org/3/tutorial/introduction.html#using-python-as-a-calculator

              【讨论】:

                猜你喜欢
                • 2017-04-17
                • 2012-09-19
                • 2018-11-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-02-23
                • 2021-11-24
                • 2019-08-02
                相关资源
                最近更新 更多