python - 用星号替换单词:模式字符串的一部分也被替换
问题描述
我正在尝试一项家庭作业,其中我应该检查句子中的一些单词。有一个要审查的单词列表,程序应该审查从用户输入获得的句子中的这些单词。
我已经解决了这个问题,但在此过程中,我尝试了一些我也期望能工作的东西,但它没有。以下是两个不同的程序,其中一个有效,另一个无效。唯一的区别是在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”的一部分。
解决方案
问题在于这"he" in "heck"
是真的。
第一个代码通过确保单词以 . 结尾来解决这个问题\n
。
另一点:您正在读取用户输入中每个单词的文件。它更有效率和概率。更容易编写、读取和调试一次读取文件并将其存储在字符串中(或者更好的是拆分器字符串的列表)
推荐阅读
- javascript - 从 Angular 中的函数返回多个值,并在 HTML div 标签中使用这些值。返回值不能分配给 TS 文件中的变量
- python - Discord 机器人未运行和事件循环
- harmonyos - DevEco Studio 中是否有 .xml 的设计选项?
- excel - BI Publisher Excel 模板处理图表中的日期
- node.js - 使用 passport-auth0 进行 MEAN Stack 用户身份验证,在 Anguler 中调用 NodeJs passport-auth0 API
- flutter - Flutter - 在多个提供者之间共享数据
- arrays - 哪种解决方案性能最好,为什么要在复杂列表中查找重复项的数量?
- reactjs - Socket IO 客户端 + React Typescript + Context API 导致 TypeError:无法分配给对象 '# 的只读属性'exports'