Замените все символы верхнего регистра на «X» и все символы нижнего регистра на «x», сохраняя при этом все пробелы или символы.

Я пытаюсь создать код, в котором я заменяю входную строку «анонимным» кодом. Я хотел бы заменить все символы верхнего регистра на «X» и все символы нижнего регистра на «x», сохраняя при этом все пробелы или символы.

Я понимаю ‹‹ переменную >>.replace‹‹ старое значение, новое значение >> и циклы if и for, но у меня возникли проблемы с реализацией им делать то, что я хочу, пожалуйста, помогите?

Извините, если код, который я разместил, неверен, я новичок в этом

input_string   =  input( "Enter a string (e.g. your name): " ) 
lower = "abcdefghijklmnopqrstuvwxyz"
upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

for input in input_string:
    if input in input_string:
        input_string = lower.replace(input, "x")

    if input in upper:
        input_string = upper.replace(input, "X")`

print( "The anonymous version of the string is:", input_string )

person frustration    schedule 28.10.2018    source источник
comment
Пожалуйста, покажите, что вы пробовали, и объясните, в чем конкретно проблема.   -  person mkrieger1    schedule 29.10.2018
comment
Изучите функцию re.sub   -  person OneCricketeer    schedule 29.10.2018
comment
Пожалуйста, отредактируйте свой вопрос, чтобы включить отформатированный код   -  person OneCricketeer    schedule 29.10.2018
comment
пробовал, нормально?   -  person frustration    schedule 29.10.2018


Ответы (2)


Существуют стандартные функции для указания того, что символ верхний регистр или нижний регистр. Они поддерживают Unicode (в Python 3 и новее), поэтому они также работают с символами с диакритическими знаками. Таким образом, вы можете использовать

''.join('x' if x.islower() else 'X' if x.isupper() else x for x in text)

где text — ваша входная строка. Например,

input_string   =  input( "Enter a string (e.g. your name): " ) 
result = ''.join('x' if x.islower() else 'X' if x.isupper() else x for x in input_string)

с вводом

I am trying to create a code where I substitute an input string into an 'anonymous' code.

приводит к

"X xx xxxxxx xx xxxxxx x xxxx xxxxx X xxxxxxxxxx xx xxxxx xxxxxx xxxx xx 'xxxxxxxxx' xxxx."
person Jongware    schedule 28.10.2018
comment
СПАСИБО, Сэр, я люблю вас - person frustration; 29.10.2018

Строки в python неизменяемы, поэтому вам нужно создать новую, перебирая входные данные.

В вашем коде lower.replace(input, "x") этого не делает - это говорит о замене содержимого алфавита, символы которого соответствуют вашему вводу, на x. Другими словами, вместо этого вы хотели сделать input.replace, но явно не пытались вставить весь алфавит.


Вот пример проверки регистра символов без ввода алфавита.

input_string = input( "Enter a string (e.g. your name): " ) 
output_string = []

for c in input_string: 
    if c.isupper(): 
        output_string.append('X')
    elif c.islower(): 
        output_string.append('x')
    else:
        output_string.append(c) 
print( "The anonymous version of the string is:", ''.join(output_string))

Другим решением было бы, например, использовать re.sub и "[A-Z]", "X", но вам решать, как они работают.

person OneCricketeer    schedule 28.10.2018