Форматирование символов в Python

1

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

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

    номер = 1234567890

Ожидаемый результат -

число = XXXXXX7890

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

    Пароль: pa55w0rd

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

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

ИЛИ ЖЕ

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

  • 0
    Что ты уже пробовал?
  • 0
    Я узнал, что символы нельзя редактировать (неизменяемые). Пытался создать переменную, присвоенную '1234567890' и преобразовать ее в список и заменить числа, используя нарезку индекса, а затем функцию "" .join () и т. Д., Но не смог продолжить.
Показать ещё 2 комментария
Теги:
list
tuples

2 ответа

3
Лучший ответ

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

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
    @devPython вы можете поблагодарить, нажав на кнопку со стрелкой вверх на ответ. Удачи.
1

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

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню