每次按任何键都在Python中运行一个函数?

时间:2013-07-05 18:04:09

标签: python loops keypress

首先,请原谅我,因为我对这个Python事物非常陌生(我真的是一个HTML / CSS类型的人,但我正在尝试分支)。这可能是一个基本的问题,但我们都必须从某个地方开始,对吧?

我正在整理一个非常基本的Python程序,它将从一串字母中选择一个随机字母,并在每次有人点击任意键时将其打印出来。整个过程非常简单,并且当前返回一个随机字母,但不等待按键执行,并在完成函数运行一次后停止。

import random
letterlist = 'abcd'


def random_letter(letters):
    print ('Press enter for a random letter...')
    print random.choice(letters)

random_letter(letterlist)

输出应如下所示:

Press enter for a random letter.
'b'
Press enter for a random letter.

(依此类推......)

很明显,无论我需要做什么都应该落入random_letter的某个地方。我一直在谷歌搜索并发现了很多对raw_input和mvscrt的引用,但我不完全确定我需要什么。我完全有可能只是提出错误的问题。

我假设假设我需要某种循环来保持无限期运行。

提前致谢!

2 个答案:

答案 0 :(得分:2)

对于初学者,你需要一个循环来继续提示用户。你还需要一些循环的退出条件。这个循环可以在函数内部如下:

def random_letter(letters):
    while True:
        x = raw_input('Press enter for a random letter...')
        if x == 'done':
            break
        print random.choice(letters)

random_letter('abcdef')

请注意,在循环内部,我们使用raw_input提示用户键入内容,任何内容,然后按Enter键。当用户输入done并点击输入时,我们会使用break突破循环。

另一种方法是将现有函数包装在循环中,并处理函数外的提示。

def random_letter(letters):
    print random.choice(letters)

while True:
    x = raw_input('Press enter for a random letter...')
    if x == 'done':
        break
    random_letter('abcdef')

答案 1 :(得分:0)

如果您不必使用循环,并考虑捕获键盘事件,那么就没有跨平台的方法:Is there a cross-platform python low-level API to capture or generate keyboard events?

对于Windows,有 pyHook http://pyhook.wiki.sourceforge.net/

您可以查看 pyKeyLogger 的代码:http://pykeylogger.wiki.sourceforge.net/

或者肮脏的方式,捕获中断:Capture keyboardinterrupt in Python without try-except