我是Python的初学者...我想使用元组和列表的基本概念和操作来格式化Python中的字符,如下所示...
number = 1234567890
期望输出为-
number = XXXXXX7890
密码:pa55w0rd
在输入密码为-
时期望输出密码:********
OR
密码:########
答案 0 :(得分:2)
对于诸如密码之类的敏感内容,最好使用内置模块。一种方法是:
import getpass
number = 1234567890
first = 'X' * max(0,len(str(number)[:-4]))
last = str(number)[-4:]
n = first + last
print(n)
# part 2
p = getpass.getpass(prompt='Enter the number : ')
if int(p) == 123:
print('Welcome..!!!')
else:
print('Please enter correct number..!!!')
如果您不想显示键入的密码,只需打印:
print('######')
它不必与打印某些东西的长度相同。
答案 1 :(得分:1)
分解所需的内容:您需要转换为字符串,以找出要替换的字符数,生成该长度的替换字符串,然后包含原始字符串的结尾。另外,您还需要对字符串过短而不能替换任何字符的字符串保持强健。
'X' * max(0, len(str(number)) - 4) + str(number)[-4:]
第二部分:使用一个库。
直接执行此操作比初学者似乎要复杂得多,因为您必须与进行文本输入的系统进行通信。这将取决于操作系统,Windows与“几乎所有其他内容”。对于在Web浏览器或GUI之外的文本输入,大多数系统都在模仿古老的纯文本终端设备,因为还没有足够的理由进行更改。这些设备具有文本输入模式(一次字符,一次一行,原始等),然后将其更改为不立即“回显”键入的字符涉及一些复杂的系统调用,然后进行其他操作编程以回显其他字符。
因此,您将要使用一个库来为您处理所有这些复杂的细节。关于密码输入的一些事情。考虑到安全隐患,我强烈鼓励使用经过测试和强化的代码,而不要自己动手编写代码。请注意,密码处理也存在各种各样的问题(恒定时间比较,内存处理等),因此,应尽可能避免这样做,或将其移至另一个程序,并且在处理时使用现有的库。
如果可以的话,请坚持使用Python standard library并使用getpass,它不会回显任何密码,而不是打印星号。
如果您真的想要星星,请在https://pypi.org/中搜索getpass,并查看人们产生的所有变体。我快速浏览的大多数内容并没有激发信心。 pysectools似乎比其他的要好,但是我没有使用它。