前言

最近在写代码的时候,需要判断一下用户是不是敲了回车键,于是写出了这样的代码:

if input('输入回车键进入程序') == '\n':
    print('开始程序。')

当时的目的是为了用户不输入任何内容,只敲回车键,无奈,print('开始程序。')永远也无法执行……

input python 无需回车 python在input输入回车_正则表达式


正确的代码应该是:

if input('输入回车键进入程序') == '':
    print('开始程序。')

== '\n'换成 == ''即可。

当敲下回车键时,表示输入结束了,而在input()函数中,默认是把回车键删除,所以最后输入的内容只剩下空的字符串。

既然都说到这了,那就一起看看 input() 的前世今生吧


input() 函数的前世今生

前世

python2.x中,有分raw_input()input()两个标准输入函数
python3.x中,只保留了input() 一个标准输入函数

简单说区别就是,在python2.x中,raw_input()输入的内容不管是数字还是其他字符都会转化为字符串,而input()只能输入纯数字
在python3.x中,input()可以输入数字和其他字符,但都会转化为字符串,相当于python2.x中的raw_input()


今生

好了,就不聊那么多过去了,看看现在input()还有什么好玩的玩法。


玩法1

让input()遇到回车键也能持续输入

我们无法修改input()函数让它忽略掉回车键,但是我们可这样“忽悠”它:

txt = ''
while True:
    k = input()
    if k == 'quit':
        break
    txt += k + '\n'
print('*****以下是输出内容*****')
print('txt:\n'+txt)

请看效果:

input python 无需回车 python在input输入回车_按键事件_02

这样我们就可以让input()好像忽略掉了回车键,可以持续输入内容,输入quit之后敲回车才结束

还有更简单的写法,看起来更高级:

txt = ''
for k in iter(input, 'quit'):
    txt += k+'\n'
print('*****以下是输出内容*****')
print(txt)

玩法2

限制用户的输入内容,比如只能输入字母

方式1:在输出结果上进行过滤,可以用正则表达式实现。

import re
while True:
    txt = input()
    txt = re.sub('[^a-zA-Z]','',txt)
    print(txt)

请看效果:

input python 无需回车 python在input输入回车_python_03

方式2:在键盘上输入上进行限制,那这样的话我们就要监听用户的键盘了
使用pynput第三方库可以对用户的键盘进行监听和操作。

from pynput.keyboard import Listener
import threading

def listening():
    def on_press(key):
        try:
            if not(65 <= key.vk <= 90): # 65~90是键盘a~z的编码值
                print('\b',end='') # \b是退格符,相当于键盘Backspace
        except AttributeError:
            pass
    with Listener(on_press=on_press) as listener:
        listener.join()

threading.Thread(target=listening).start()
while True:
    txt = input()
    print(txt)

请看效果:

input python 无需回车 python在input输入回车_回车键_04


这样的话就只能输入字母了,输入别的内容都会被删掉。


总结

虽然上面介绍的一些用法好像并没什么用,但是学习嘛

input python 无需回车 python在input输入回车_正则表达式_05