0

所以我有一个基本问题;我让用户调用一个函数,该函数接受一个字符串输入,例如在这种情况下是苹果。所以函数get_view被称为get_view('apples'),它的工作是将apples中的所有字符转换为隐藏字符,例如'apples'-->'^^^^^^',hello world会变成' ^^^^^ ^^^^^'等等,我的问题是,在我下面的代码中,它确实转换了所有字母和数字等,但它不会在你好世界之间留下空白,它也没有考虑 (')。如何修改我的代码以使其功能齐全?

代码 :

def get_view(puzzle):

    view = puzzle
    length = len(puzzle)
    for index in range(0,length):
        if ((puzzle[index]) != '' or '-' ):
            view = view[: index] + HIDDEN + view[index+1:]

HIDDEN = '^' (它是一个常数)

谢谢,网站的新手<3

4

3 回答 3

2

对于大多数非平凡的字符串操作,我使用像re.sub()这样的正则表达式函数,如下所示:

import re
print(re.sub("[a-zA-Z0-9_']", "^", "Hello world, what's up?"))
#                                   ^^^^^ ^^^^^, ^^^^^^ ^^?
于 2012-10-19T00:28:30.980 回答
1

你想做这样的事情吗?

view = ''.join((HIDDEN if c.isalnum() else c) for c in puzzle)
于 2012-10-19T00:08:27.430 回答
1

假设您不想更改空白字符(空格、制表符、换行符),这是使用 for 循环的一种方法:

def get_view(puzzle, hide_char='^'):
    view = []
    for c in puzzle:
        if not c.isspace():
            view.append(hide_char)
        else:
            view.append(c)
    return ''.join(view)

或者(更好)是使用列表推导:

def get_view(puzzle, hide_char='^'):
    view = [c if c.isspace() else hide_char for c in puzzle]
    return ''.join(view)

要不就:

def get_view(puzzle, hide_char='^'):
    return ''.join(c if c.isspace() else hide_char for c in puzzle)
于 2012-10-19T00:51:45.700 回答