- 前言
- 实现思路(会不会python都可以看):
- 介绍几点代码中可能会起疑惑的点
- 源代码
源代码使用Python实现一个黑窗口加密输入字符串的插件。
可以将他封装在函数内,调用函数返回输入的字符串。
具体效果如下:
可以实现回删。实现思路(会不会python都可以看):
介绍几点代码中可能会起疑惑的点
- 接受输入字符(接收的时候必须无回显)可以使用getch()
- 判断接收的字符是不是回车(\n)【回车预示着输入密码结束】
- 判断字符是不是删除键(\b)
【是\b的话需要回退光标,并删除原来位置上的数据,其他语言可以对该位置赋初值】- 其他字符打印*并将数据加入所要返回的列表内
getch
:这个getch与c\c++中的还有些不一样,这个得到的是一个字节码,需要解码才能得到字符串。
\b \b
:都知道\b是ASCII表中的退格键他对应的值为8,所以在输入的时候使用ord()进行了转换
\b是退格,那么\b \b就是使用空格将原来的字符覆盖后再将光标移到原来的位置。
sys.stdout.flush()
:如果不加这一句话输入密码的时候只有按回车键才会显示出来,也就是没
有办法同步显示*或者删除*,加上这句的意思就是刷新缓冲区。
具体为什么我也不是很清楚,之前写c++小项目的时候偶尔会有这种情况,刷新一下缓冲区就好了,所以在碰到这种问题的时候我首先想到了刷新缓冲区。
- 其他的应该大家都会了,毕竟会python的多少会点逻辑的处理。
(代码放在下方了)
from msvcrt import getch
import sys
sys.stdout.write("请输入您的密码:")
sys.stdout.flush()
passwd=[]
while True:
n=getch().decode()
if ord(n)==13:
break
else:
if ord(n)==8 and len(passwd)!=0:
print('\b \b',end="")
passwd.pop()
elif ord(n)==8 and len(passwd)==0:
pass
else:
print('*',end="")
passwd.append(n)
sys.stdout.flush()
print()
print(passwd)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)