如何替换所有未出现在预定义的字符串/列表中的符号?

时间:2018-10-03 17:22:58

标签: python function

因此,我正在尝试创建一个函数,要求用户输入文本,并且结果应打印该文本的加密版本。

它应该工作的方式是所有符号不匹配中的任何符号 此变量:

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 :(得分:3)

您可以使用列表理解来遍历字符串,然后使用''.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'

答案 1 :(得分:1)

您可以使用以下方法将您的代码转换为有效代码:

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))