首页 > 解决方案 > 用星号替换单词:模式字符串的一部分也被替换

问题描述

我正在尝试一项家庭作业,其中我应该检查句子中的一些单词。有一个要审查的单词列表,程序应该审查从用户输入获得的句子中的这些单词。

我已经解决了这个问题,但在此过程中,我尝试了一些我也期望能工作的东西,但它没有。以下是两个不同的程序,其中一个有效,另一个无效。唯一的区别是在fin中搜索word_list[i]的那一行。

from cs50 import get_string
from sys import argv


def main():
if len(argv) != 2:
        print("Usage: python bleep.py dictionary")
        exit(1)

    fin = open(argv[1])
    print("What message would you like to censor?")
    message = get_string()
    word_list = message.split()

    # This variant works.
    for i in range(len(word_list)):
        if (word_list[i].lower() + '\n') in fin:
            word_list[i] = '*' * len(word_list[i])
        fin.seek(0)

    # The following doesn't work.
    # for i in range(len(word_list)):
    #    if word_list[i].lower() in fin.read(): 
    #        word_list[i] = '*' * len(word_list[i])
    #    fin.seek(0)

    print(' '.join(word_list))

    fin.close()

if __name__ == "__main__":
    main()

假设我想用 **** 审查“heck”,但第二个程序也审查了一个像“he”这样的字符串,它只是“heck”的一部分。

标签: python

解决方案


问题在于这"he" in "heck"是真的。

第一个代码通过确保单词以 . 结尾来解决这个问题\n

另一点:您正在读取用户输入中每个单词的文件。它更有效率和概率。更容易编写、读取和调试一次读取文件并将其存储在字符串中(或者更好的是拆分器字符串的列表)


推荐阅读