Форматирование символов в Python - PullRequest
0 голосов
/ 25 августа 2018

Я новичок в Python ... Я хотел бы отформатировать символы в Python, используя основные понятия и операции Tuples и Lists, как показано ниже ...

  1. Я ввожу 10-значный номер, и кроме последних 4-х цифр все цифры должны быть заменены на «X». Например,

    число = 1234567890

Ожидается вывод как -

число = XXXXXX7890

  1. Как замаскировать введенные символы / цифры в Python, используя концепцию Tuples / Lists без импорта, импортируя какие-либо модули или существующие старшие функции. Является ли это возможным ? Например, ввод некоторых символов, которые должны быть замаскированы с помощью * (звездочка) или # (хэширование) при вводе. Например,

    пароль: pa55w0rd

Ожидается вывод при вводе пароля как -

пароль: ********

OR

пароль: ########

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Разбейте то, что нужно: вам нужно преобразовать в строку, выяснить, сколько символов нужно заменить, сгенерировать строку замены такой длины, а затем включить хвост исходной строки.Кроме того, вы должны быть устойчивы, например, к строкам, слишком коротким, чтобы заменить какие-либо символы.

'X' * max(0, len(str(number)) - 4) + str(number)[-4:]

Для второй части: используйте библиотеку.

Выполнить это напрямую сложнее, чемЭто может показаться новичку, потому что вам приходится общаться с системами, которые принимают текстовые сообщения.Это будет зависеть от операционной системы, Windows против "примерно всего остального".Для ввода текста вне веб-браузера или графического интерфейса большинство систем эмулируют древние терминальные устройства только для текста, потому что пока нет достаточных оснований для изменения этого.Эти устройства имеют режимы ввода текста (символ за раз, строка за раз, необработанный текст и т. Д.), И их изменение на , а не , сразу же "выводит эхо" на введенный символ, включает в себя некоторые сложные системные вызовы, а затем другое программирование.вместо этого использовать другой символ.

Таким образом, вы захотите использовать библиотеку, чтобы позаботиться обо всех этих сложных деталях для вас.Что-то вокруг ввода пароля.Учитывая последствия для безопасности, я настоятельно рекомендую использовать проверенный и усиленный код вместо собственного.Имейте в виду, что существуют и другие проблемы, связанные с обработкой паролей (сравнение с постоянным временем, обработка памяти и т. Д.), Так что, насколько это возможно, вам следует вообще избегать этого или переносить его в другую программу, а также при обработкеиспользуйте существующие библиотеки.

Если можете, придерживайтесь стандартной библиотеки Python и используйте getpass , который ничего не выводит для паролей вместо печатизвезды.

Если вам действительно нужны звезды, найдите в https://pypi.org/ getpass и посмотрите все варианты, которые создали люди.Большинство из тех, что я видел быстрым взглядом, не внушали доверия; pysectools показалось лучше других, но я им не пользовался.

0 голосов
/ 25 августа 2018

Всегда лучше использовать встроенные модули для таких чувствительных вещей, как пароль. Один из способов сделать это:

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('######')

Он не должен быть такой же длины, вы просто должны что-то напечатать.

...