Python中的字符格式

时间:2018-08-25 19:07:00

标签: python list tuples

我是Python的初学者...我想使用元组和列表的基本概念和操作来格式化Python中的字符,如下所示...

  1. 我输入了10位数字,除了剩下的最后4位数字外,所有数字均应替换为“ X”。例如
      

    number = 1234567890

期望输出为-

  

number = XXXXXX7890

  1. 如何使用Tuples / Lists概念在Python中屏蔽输入的字符/数字,而不是通过导入任何模块或现有的高级函数来屏蔽。可能吗 ? 例如输入了一些字符,输入时应使用*(星号)或#(哈希)将其屏蔽。例如
      

    密码:pa55w0rd

在输入密码为-

时期望输出
  

密码:********

OR

  

密码:########

2 个答案:

答案 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似乎比其他的要好,但是我没有使用它。