【问题标题】:Python - Replacing every other word in a string? Memorization projectPython - 替换字符串中的所有其他单词?记忆项目
【发布时间】:2021-09-24 22:57:56
【问题描述】:

我正在研究一个记忆项目的逻辑。我希望能够使用 input() 接收来自用户的句子,然后用下划线 "_" 替换每个其他单词的每个字母。例如,我想获得输入:

sentence = input('Please enter a sentence:\n\n')

示例输入:

敏捷的棕狐跳过了懒狗。

然后我想让python把这个字符串变成:

____ 棕色的___ 跳了____ 条____ 狗。

这可以让我朝着一个伟大的方向前进,奖金将是一种简单的方法,可以扩展为仅取消屏蔽每三个单词,例如:

_____ _____ 狐狸 ______ ____ ____ ___。

或第四个单词,以此类推。

这是我迄今为止尝试过但不起作用的方法:

>>> while i < len(sentence.split()):
...     sentence[i] = "_____"
...     i = i + 2
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: 'str' object does not support item assignment
>>>

【问题讨论】:

标签: python


【解决方案1】:

inpt 表示用户的输入。假设您想保留每个 k-th 单词。你可以这样做:

output = ' '.join([word if n % k == 0 else '_' * len(word) for n, word in enumerate(inpt.split())])

【讨论】:

    【解决方案2】:

    您的方法的问题:while i &lt; len(sentence_.split()): ... sentence_[i] = "_____":您尝试分配给原始字符串中的一个字符,而不是分配给单词列表中的一个单词。

    通常,您当然可以为此使用str.split,但这与标点符号不匹配,即dog. 之后的. 将被视为单词的一部分。

    相反,您可以使用正则表达式来查找单词(例如,包括'-,但没有其他标点符号),然后使用带有回调函数的re.subitertools.count 来确定替换:

    >>> import re, itertools
    >>> c = itertools.count()
    >>> text = "The lightning-quick brown fox jump'd over the (lazy) dog."
    >>> re.sub(r"[\w'-]+", lambda m: m.group() if next(c) % 2 == 0 else "_"*len(m.group()), text)
    "The _______________ brown ___ jump'd ____ the (____) dog."
    

    调整next(c) % 2 == 0 部分以适应其他间距。

    【讨论】:

      【解决方案3】:

      我会使用一个 for 循环来扫描“”并删除所有字符,直到下一个字符串。

      【讨论】:

        猜你喜欢
        • 2014-04-29
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 2017-06-23
        • 2016-11-24
        • 2013-03-17
        相关资源
        最近更新 更多