如何在input()进行时访问input()函数

时间:2015-01-16 19:42:40

标签: python input python-3.4

我有一个与用户交流的程序。我正在使用input()来自用户的数据,但是,我想告诉用户,例如,如果用户输入了一个脏话,我想在用户输入时打印You are swearing! Delete it immediately!

如您所知,首先Python正在等待input()完成。我的目标是在{I}完成之前访问input()然后我可以在用户输入时打印You are swearing! Delete it immediately!

我的程序中有太多的dicts和函数,所以我将编写一个与我的主要问题相关的示例。

print ("Let's talk..")
isim=input("What's your name?: ")
print ("Hi there {}.".format(isim))

no=["badwords","morebadwords"]

while True:
    user=input(u">>>{}: ".format(isim)).lower()
    for ct in user.split():
        if ct in no:
            print ("You are swearing! Delete it immediately! ")

但它没有用,因为Python在user输入完成之前一直在等待。如何在用户输入时执行此操作? -Python 3.4,Windows -

1 个答案:

答案 0 :(得分:2)

我对此没有多少经验,你可能会找到一些包来做你想做的事。 但总的来说,你需要实现一些行编辑,并在实现它时扫描输入。

getch功能的想法是让您在每次按键后都能获得回调。代码是unix和windows之间的跨平台。 要使用它,只需从getch导入getch。

只有对退格有限的支持,你可以这样写:

from getch import getch
import sys

def is_bad(text):
    no=["badwords","morebadwords"]
    words = text.split()
    for w in words:
        if w in no:
            return True
    return False

def main():
    print 'Enter something'
    text = ''
    sys.stdout.write('')
    while True:
        ch = getch()
        if ord(ch) == 13:
            sys.stdout.write('\n')
            break
        if ord(ch) == 127:
            if text:
                text = text[:-1]
            # first one to delete, so we add spaces
            sys.stdout.write('\r' + text + ' ')
            sys.stdout.write('\r' + text)
        else:
            text += ch
            sys.stdout.write(ch)
        if is_bad(text):
            print 'You are writing something bad...'
    print 'text = %s' % text        



if __name__ == '__main__':
    main()

应该通过拆分更清晰的功能来改进代码,你也应该处理错误的消息输入后,但我希望你明白这一点。

希望它会有所帮助。