无法获得功能

时间:2013-04-17 22:32:44

标签: python function

我正在尝试创建一个函数来结束我的游戏,消息倒计时直到它结束,我不得不在我的文本冒险游戏中重复这段代码,所以我决定做一个函数它是为了整洁和高效。但我无法弄清楚如何定义和调用这样的函数。这是我试图执行的代码:

print "That\'s a real shame..."
time.sleep(1)
print 'Exiting program in 5 seconds:'
time.sleep(1)
print '5'
time.sleep(1)
print '4'
time.sleep(1)
print '3'
time.sleep(1)
print '2'
time.sleep(1)
print '1'
time.sleep(1)
sys.exit('Exiting Game...')
break

所以我定义了这样的函数:

def exit():
    print "That\'s a real shame..."
    time.sleep(1)
    print 'Exiting program in 5 seconds:'
    time.sleep(1)
    print '5'
    time.sleep(1)
    print '4'
    time.sleep(1)
    print '3'
    time.sleep(1)
    print '2'
    time.sleep(1)
    print '1'
    time.sleep(1)
    sys.exit('Exiting Game...')
    break

我正在调用这样的函数:

elif ready == 'n':
    exit

我做错了什么?

4 个答案:

答案 0 :(得分:7)

您可以通过键入exit()来调用该函数。我修改了倒计时代码并将其转换为我在exit()内调用的函数,以演示如何从代码段中调用一个函数。

def exit():
    print "That\'s a real shame..."
    time.sleep(1)
    print 'Exiting program in 5 seconds:'
    time.sleep(1)
    count_down(5) # Call Countdown clock
    print 'Exiting Game...'
    sys.exit()

def count_down(number):
    for i in reversed(range(number)):
        print i+1
        time.sleep(1)

exit() # <-- This how you call exit, you were missing the parentheses at the end.

输出:

That's a real shame...
Exiting program in 5 seconds:
5
4
3
2
1
Exiting Game...

修改 添加了更深入的解释。

第一行def count_down是一个函数,只需一个parameter并有一个目的,可以处理倒计时。

def count_down(number):

第二行包含我们称之为for loop的内容。此代码的目的是循环对象。从4开始,然后3,2,1等。同一行中的变量i将在每次循环通过数字时更改,并且只能在循环内访问。第一次执行打印时,它将是5,然后是下一次4,依此类推。

 for i in reversed(range(number)):

在此功能中,我们还使用了两个额外的关键字和一个参数reversedrange和参数number

reversed(range(number))

range用于创建数字列表,例如[0, 1, 2, 3, 4],for语句将从0开始循环,然后它将一直采用下一个数字,直到它到达最后一个数字4。我将解释为什么它从零开始,只有四个,而不是我的答案结束时的五个。

reversed用于反转我们使用范围创建的列表。我们希望从4开始,而不是0

reversed =&gt;之前[0,1,2,3,4]

reversed] =&gt;之后[4,3,2,1,0]

number是一个参数。参数是我们通过在括号exit()中包含值而从()函数执行函数时提供的值。在这种情况下,我们指定了5,所以我们创建的列表 range的范围为0 - 4(0,1,2,3,4 =总共五个数字)。如果您在括号中指定了10,它将创建一个从0开始一直到9的列表。并且您的代码将从10减少到1,而不是从5减少到1。

当Python开始处理for loop时,它将执行内部代码,从print开始,然后是sleep,并继续为创建的列表中的每个数字执行此操作按range。由于我们在这种情况下指定了五个,因此它将执行代码共五次。

当Python在for loop内执行代码时,它将首先调用print函数。因为for循环将从4开始,而不是5,所以我们需要做一些基本的算术,并将我们循环的每个项目的值增加一个。我们在变量+ 1之后输入i来执行此操作。

它从4开始而不是5开始的原因是因为编程列表以数字0开头,而不是1。有一个更为技术性的解释,说明为什么lists以0开头,而不是1(或4,在这种情况下不是5,因为我们颠倒了列表)here

答案 1 :(得分:4)

您应该将其称为exit(),而不是exit

答案 2 :(得分:0)

很简单。使用保留消息的tuple和定时器延迟,这样您甚至可以控制每条消息的延迟时间。

import time, sys
messages = [
    ("That's a shame", 1),
    ("Exiting program in 5 seconds", 1),
    (None, 5)
]

for k,v in messages:
    if k:
        print(k)
        time.sleep(v)
    else:
        # start countdown timer
        while v:
            print v
            time.sleep(1)
            v -= 1

sys.exit()

答案 3 :(得分:-1)

执行此代码的好方法是:

def exit():
    timer= 5
    print "That\'s a real shame..."
    time.sleep(1)
    print 'Exiting program in 5 seconds:'
    for i in range (5):
        time.sleep(1)
        print timer
        timer = timer - 1
    sys.exit('Exiting Game...')

##You call the function like this
exit()