首页 > 解决方案 > 如何用asterix替换切片单词的其余部分?

问题描述

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

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

任何帮助将不胜感激,并简要说明它是如何完成的。欣赏它!

标签: python

解决方案


现在你只是*在切片字符串之后附加一个,然后在它之后添加字符串的其余部分

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

推荐阅读