我有一个与用户交流的程序。我正在使用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 -
答案 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()
应该通过拆分更清晰的功能来改进代码,你也应该处理错误的消息输入后,但我希望你明白这一点。
希望它会有所帮助。