如何用星号替换切成薄片的单词的剩余部分?

时间:2019-05-20 04:01:23

标签: python

因此,我正在尝试制作一个简单的小脚本,该脚本需要一个字符串,将其切成指定的字符,然后用星号(*)替换单词的其余部分。下面的示例。

def multi_blank(strng, ch_count):
    """
    >>> multi_blank("banana", 1)
    'b*****'
    """

在尝试学习切片和索引编制时,我总是遇到麻烦。我设法切成指定的数字,但无法弄清楚如何用星号替换单词的其余部分。

    return strng[:ch_count] + "*" + strng[ch_count:]

以上是我尝试过的方法,但它返回以下内容:

Expected:
    'b*****'
Got:
    'b*anana'

我也尝试过:

    string = strng.replace(strng[ch_count:], '*')
    return string

任何帮助将不胜感激,只需简要说明其操作方式即可。赞赏!

2 个答案:

答案 0 :(得分:5)

现在,您只需要在切片的字符串之后附加一个*,然后在字符串之后添加其余的字符串

In [22]: strng = 'banana'                                                                                                                                                           

In [24]: strng[:1] + "*" + strng[1:]                                                                                                                                                
Out[24]: 'b*anana'

因此,为了创建字符串的其余部分,您可以对字符串使用重载乘法,方法是将*乘以(len(strng) - ch_count)倍(建议使用@ cs95)并将其附加到切片字符串的结尾

从文档中:https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations

  

参数必须都是数字,或者一个参数必须是整数,另一个参数必须是序列。在前一种情况下,数字将转换为通用类型,然后相乘。 在后一种情况下,将执行序列重复;负的重复因子会产生一个空序列。

In [27]: strng = 'banana'                                                                                                                                                           

In [28]: strng[:1] + "*" * (len(strng)-1)                                                                                                                                           
Out[28]: 'b*****'

因此更新后的代码将是

def multi_blank(strng, ch_count):
    """
    >>> multi_blank("banana", 1)
    'b*****'
    """
    return strng[:ch_count] + "*" * (len(strng) - ch_count)

print(multi_blank("banana", 1))

输出将为

b*****

答案 1 :(得分:3)

您可以尝试以下代码:

def multi_blank(string, ch_count):
    return string[:ch_count] + ("*"*len(string[ch_count:]))

print(multi_blank('banana',1))

输出:

b*****
>>> 

感谢@ cs95提出的建议,通过在获取剩余文本长度更改为星号之前省略生成切片文本的不必要操作来使代码更高效。因此,代码更改为:

def multi_blank(string, ch_count):
    return string[:ch_count] + "*"*(len(string)-ch_count)

print(multi_blank('banana',1))