前言
最近在写代码的时候,需要判断一下用户是不是敲了回车键,于是写出了这样的代码:
if input('输入回车键进入程序') == '\n':
print('开始程序。')
当时的目的是为了用户不输入任何内容,只敲回车键,无奈,print('开始程序。')
永远也无法执行……
正确的代码应该是:
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()
好像忽略掉了回车键,可以持续输入内容,输入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)
请看效果:
方式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)
请看效果:
这样的话就只能输入字母了,输入别的内容都会被删掉。
总结
虽然上面介绍的一些用法好像并没什么用,但是学习嘛