Python和缩进,无法入门。

时间:2009-10-05 07:22:34

标签: python

我刚刚开始学习python而且我被赶上了。我来自C背景。

class Alarm:

    def timer():

    def main():
        print ("Timer has Started")

    main()

当我尝试运行此代码时,我总是遇到一个愚蠢的错误:

alarm > python alarm.py 
  File "alarm.py", line 5
    def main():
      ^
IndentationError: expected an indented block

9 个答案:

答案 0 :(得分:11)

你有一个空的def

def timer():

使用

def timer():
    pass

代替。

答案 1 :(得分:3)

了解pass statementmain通常不属于班级。

全局(模块级)main()函数比Alarm.main()类方法简单。通常,main()函数来自模块级别。

class Alarm:

    def timer():
        pass

def main():
    print ("Timer has Started")

main()

答案 2 :(得分:1)

尝试使用deindent main()并将pass添加到timer并定义一个init方法:

class Alarm():

    def __init__(self):
        print ("Timer has Started")

<shell>$  Alarm()

答案 3 :(得分:1)

您的计时器功能未定义。 (并且你的空格/制表符缩进可能是混合的)

有关课程的详细信息,请参阅教程(classes)。

class Alarm:

    def timer(self):
        pass
    def main(self):
        print ("Timer has Started")

if __name__ == '__main__':
    class_inst = Alarm()
    class_inst.main()

如果你进入python阅读PEP8 此外,使用pylint会有所帮助,它会指出您在执行代码之前会遇到的缩进和许多其他错误。

答案 4 :(得分:1)

我认为你想使用__init__,这是构造函数......

class Alarm:

    def timer(self): 
        print('timer has started')

    def __init__(self): 
        print('constructor')
        self.timer()


x = Alarm()
  

构造

     

计时器已启动

我的例子与其他人的不同之处在于我实际上是在实例化一个新对象。

注意:

  • 指定self作为类
  • 中定义的任何方法的第一个参数
  • __init__是为构造函数定义的方法
  • 通过执行variableName = className()来调用类,就像调用函数一样,没有new关键字
  • 如果您有空功能,请使用pass
  • 这样的def foo(self): pass关键字

答案 5 :(得分:1)

调用main()会产生未定义的函数错误,因为它是一个Alarm方法。

恕我直言,您应该使用的正确表格如下:

class Alarm:
    def timer():
      pass

    @staticmethod
    def main():
      print ("Timer has Started")

if __name__ == "__main__" :
    Alarm.main()

答案 6 :(得分:0)

正如其他人所指出的,你有一个语法错误,因为timer()没有正文。

你根本不需要在python中使用main()。通常人们使用它来表明文件是顶级程序而不是要导入的模块,但它只是按照惯例

你也可能会看到这个成语

def main():
    blah blah

if __name__ == "__main__":
    main()

此处__name__是一个特殊变量。如果文件已导入,则它将包含模块名称,因此比较失败且main未运行。

对于顶级程序__name__包含“__main__”,因此将运行main()函数。

这很有用,因为有时你的模块在作为程序加载时可能会运行测试,但是如果要将这些测试导入到更大的程序中,则不希望这些测试运行

答案 7 :(得分:0)

在Python中,您不需要将所有内容都定义为类。在此代码中没有任何内容可以封装,因此没有理由定义Alarm类。只需在模块中使用这些功能。

答案 8 :(得分:0)

感谢所有人的帮助。我正在做一个小闹钟/计时器,提醒我起床,不时地散步。我得到了大部分工作,而且效果很好。检查它与秒表,它很好。

import time

def timer(num):
    seconds = num*60
    print (num , "minutes", seconds , "seconds")

    while (seconds > 0):
        print (seconds, "seconds")
        time.sleep(1)
        seconds = seconds-1

    print ("Time to get up and take a WALK!!!!")
    main()


def main():
    number = input("Input time : ")
    int(number)
    timer(number)


if __name__ == '__main__':
    main()