【Python 百练成钢】使用Python实现密码登录器

【Python 百练成钢】使用Python实现密码登录器,第1张

文章目录
    • 前言
        • 实现思路(会不会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)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/567408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存