star870126 发表于 2018-8-14 10:52:23

Python小实验:疯狂填词

#! python  
# coding: utf-8
  
##创建一个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现ADJECTIVE、NOUN、ADVERB 或VERB 等单词的地方,加上他们自
  
#己的文本。例如,一个文本文件可能看起来像这样:
  
# The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN wasunaffected by these events.
  
#程序将找到这些出现的单词,并提示用户取代它们。
  
#Enter an adjective:
  
#silly
  
#Enter a noun:
  
#chandelier
  
#Enter a verb:
  
#screamed
  
#Enter a noun:
  
#pickup truck
  
#以下的文本文件将被创建:
  
#The silly panda walked to the chandelier and then screamed. A nearby pickup truck was unaffected by these events.
  
#结果应该打印到屏幕上,并保存为一个新的文本文件。
  

  

  
# 程序代码如下:
  
import re
  
f1 = open('a.txt','r')
  
strf1 = f1.read()
  
print("原文件内容为:")
  
print(strf1)
  
#将字符串以空格为分隔符生成一个列表
  
strf1_list = strf1.split()
  
#去除列表中元素结尾的逗号和句号,并获取有逗号和句号的元素索引和值保存在一个字典中
  
i = 0
  
j = {}
  
for strs in strf1_list:
  
    if '.' in strs or ',' in strs:
  
      j=strs
  
      strf1_list = strs[:-1]
  
    i += 1
  
print("打印出没有句号和逗号的列表")
  
print(strf1_list)
  
print("打印出有句号有逗号的元素索引和值")
  
print(j)
  
f1.close()
  
# 由于原文件需要被替换的单词都是大写的英文单词
  
#使用正则表达式找出原文件中所有将被替换的单词
  
replist = re.findall(r'{2,}',strf1)
  
print("原文件中将被替换的单词为:")
  
print(replist)
  
for rep in replist:
  
    #元音字母开头的字母提示信息不一样
  
    if rep in 'AEIOU':
  
      inputstr = input("Enter an %s " % rep)
  
    else:
  
      inputstr = input("Enter a %s " % rep)
  
    print(inputstr)
  
    # 先将替换后的单词插入到原列表对应的位置
  
    strf1_list.insert(strf1_list.index(rep),inputstr)
  
    # 再将原先的单词删除
  
    strf1_list.remove(rep)
  
#将上面去除逗号或句号的元素后面将逗号或句号添加回去,根据j字典可以准确找到结尾有逗号或句号的元素
  
for key,value in j.items():
  
   strf1_list = str(strf1_list) + str(value[-1])
  
# 将列表转换为字符串
  
newstr = ' '.join(strf1_list)
  
print("替换后的内容为:") #
  
print(newstr)
  
# 将新的字符串写入文件b.txt中,并打印到屏幕
  
f2 = open('b.txt','w+')
  
f2.write(newstr)
  
f2.close()
页: [1]
查看完整版本: Python小实验:疯狂填词