#! 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[i]=strs strf1_list[i] = strs[:-1] i += 1 print("打印出沒有句號和逗號的列表") print(strf1_list) print("打印出有句號有逗號的元素索引和值") print(j) f1.close() # 因爲原文件須要被替換的單詞都是大寫的英文單詞 # 使用正則表達式找出原文件中全部將被替換的單詞 replist = re.findall(r'[A-Z]{2,}',strf1) print("原文件中將被替換的單詞爲:") print(replist) for rep in replist: #元音字母開頭的字母提示信息不同 if rep[0] 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[key] = str(strf1_list[key]) + str(value[-1]) # 將列表轉換爲字符串 newstr = ' '.join(strf1_list) print("替換後的內容爲:") # print(newstr) # 將新的字符串寫入文件b.txt中,並打印到屏幕 f2 = open('b.txt','w+') f2.write(newstr) f2.close()