【Python 百练成钢】使用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)

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷尔。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值