0

我正在尝试创建一个函数,该函数将通过一条消息倒计时结束我的游戏,并且我不得不在我的文本冒险游戏中重复这个代码块,所以我决定为它制作一个函数为了整洁和效率。但我不知道如何定义和调用这样的函数。这是我试图执行的代码:

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

4 回答 4

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是一个函数,它接受一个参数并且有一个目的,处理倒计时。

def count_down(number):

第二行包含我们所说的for 循环。这段代码的目的是循环对象。4从那时开始等等。每次循环经过一个数字时,同一行3,2,1的变量都会改变,并且只能在循环内部访问。i第一次执行打印将是 5,然后是下一次 4,依此类推。

 for i in reversed(range(number)):

在这个函数中,我们还使用了两个额外的关键字和一个参数,reversed以及range参数number

reversed(range(number))

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

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

之前reversed=>[0,1,2,3,4]

之后reversed]=>[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。由于我们在本例中指定了 5 次,因此它总共会执行 5 次代码。

由于 Python 在其中执行代码,for loop它将首先调用 print 函数。因为 for 循环将从 开始4,而不是5,我们需要做一些基本的算术并将我们循环的每个项目的值增加一。我们通过+ 1在变量后面键入来做到这一点i

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

于 2013-04-17T22:37:33.333 回答
4

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

于 2013-04-17T22:37:25.100 回答
0

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

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()
于 2013-04-17T22:46:07.000 回答
-1

A good way to do this code is:

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()
于 2013-04-17T22:47:57.570 回答