Как я могу заменить все вхождения символов, которые не появляются в предопределенной строке / списке? - PullRequest
0 голосов
/ 03 октября 2018

Итак, я пытаюсь создать функцию, в которой у пользователя запрашивается ввод текста, и в результате должна быть напечатана зашифрованная версия текста.

Должно работать так, чтобы все символы, не соответствующие ни одному символу в этой переменной:

alphabet =  "abcdefghijklmnopqrstuvwxyz ?"

, должны быть заменены знаком вопроса '?'.

Так, например:

'THIS is a t#est'

приведет к

'???? is a t?est'. 

Это то, что я получил до сих пор.

alphabet =  "abcdefghijklmnopqrstuvwxyz ?"

xalphabet = list(alphabet)

code = input('Please enter the text you want to code: ')

xcode = list(code)

def clean_text(xcode):
    for xcode in xalphabet:
        if xcode == xalphabet:
            continue
        else:
            xcode.replace(xcode, '?')

    return xcode

def main ():
    print(clean_text(xcode))

if __name__ == "__main__":
    main()

Что яполучил только отпечатки '?'

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы можете превратить ваш код в рабочий код с помощью:

alphabet =  "abcdefghijklmnopqrstuvwxyz ?"

code = input('Please enter the text you want to code: ')

def clean_text(code):
    for x in code:
        if x not in alphabet:
            code = code.replace(x, '?')
    return code

print(clean_text(code))
0 голосов
/ 03 октября 2018

Вы можете просто перебрать вашу строку с использованием списка, затем использовать ''.join:

alphabet =  "abcdefghijklmnopqrstuvwxyz ?"

s = 'THIS is a t#est'

>>> ''.join([i if i in alphabet else '?' for i in s])
# '???? is a t?est'

Или как функцию:

def clean_text(xcode):
    return ''.join([i if i in alphabet else '?' for i in xcode])

В качестве другого подхода выможно подумать об использовании регулярных выражений:

import re
s = 'THIS is a t#est'

>>> re.sub('[^abcdefghijklmnopqrstuvwxyz ?]', '?',s)
# '???? is a t?est'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...