如何连接()第8章自动化无聊的Stu

2024-09-30 01:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

从《用Python自动化无聊的东西》一书中: 创建一个madlibs程序,该程序读入文本文件,并允许用户在文本文件中出现形容词、名词、副词或动词的任何位置添加自己的文本。例如,文本文件可能如下所示:

形容词panda先是名词,然后是动词。附近的一个名词是 不受这些事件的影响。在

程序会找到这些情况并提示用户进行替换。”

我快做完了,但我好像不知道怎么做。加入文件中的最后一个列表。我在网上查过,试过这些方法。我没有从join中获取字符串,而是在“”中获取空格。join(mod4)分隔每个列表字符串值中的字母。 [“A n”,“o n e”,“t w o”,“A n d”,“t h r e e”,“f o u r”] 其他一切都起作用。在

#! python3

import re

madText = open('madText.txt', 'w')

text = 'An ADJECTIVE, a NOUN, an ADVERB and a VERB.'

madText.write(text)
madText.close()

content = re.split('\W+', text)

for i in content:

    if i == "ADJECTIVE":
        replaceRegex = re.compile(r'(ADJECTIVE)')
        print('Enter an ADJECTIVE:')
        ADJECTIVE = input()
        output = replaceRegex.sub(ADJECTIVE, str(content))

    elif i == "NOUN":
        replaceRegex = re.compile(r'(NOUN)')
        print('Enter a NOUN:')
        NOUN = input()
        output = replaceRegex.sub(NOUN, str(output))

    elif i == "ADVERB":
        replaceRegex = re.compile(r'(ADVERB)')
        print('Enter an ADVERB:')
        ADVERB =  input()
        output = replaceRegex.sub(ADVERB, str(output))

    elif i == "VERB":
        replaceRegex = re.compile(r'(VERB)')
        print('Enter a VERB:')
        VERB = input()
        output = replaceRegex.sub(VERB, str(output))

content = re.split('\W+', output)
#content = list(output.split(' '))
content = ' '.join(content)
print(content)
madLibs = open('madText2.txt', 'w')
madLibs.write(content)
madLibs.close()

Tags: 程序reinputoutputcontentadjectivenounprint
3条回答

这是我对同样练习的解决方案。在

import os, re

def start():
    fileName = input('Enter the file name: ')
    exist_fileName = os.path.abspath(fileName)
    if os.path.exists(exist_fileName) == True:

        text_file = open(exist_fileName)
        text_content = text_file.read()
        text_file.close()
        print(text_content)


        text_regex = re.compile(r'ADJECTIVE|NOUN|VERB|ADVERB')
        match_text = text_regex.findall(text_content)

        for match in match_text:
            user_input = input('Enter ' + match + ': ')
            text_content = text_content.replace(match, user_input, 1)
        print(text_content)

        new_fileName = 'new_' + fileName
        new_file = open(new_fileName, 'w')
        new_file.write(text_content)
        new_file.close()

    else:
        print('The file you have entered does not exist. Please enter a valid file name.')
        start()

start()

你有一个基本的假设阻止你完成这项工作。您对mod4的赋值基于之前的赋值及其顺序。在

相反,您应该做的是将output变量初始化为[],并在遍历content时向其追加单词。你可以加上你的即兴词和真正的词。在

一旦构建了输出列表,然后使用join将该output转换为字符串。在

另外,使用regex是一种过度的杀戮。假设您在循环之前做了一个output = []。在

if i == 'NOUN':
   print('Enter a NOUN:')
   noun = input()  # raw_input() on Python 2
   output += noun
[...]

现在,当您点击每个adlib标记时,您将其替换为输入的文本并构建输出列表。在

这是我的答案。我想我应该在4分钟内得到-2个否决票。:)

import re

madText = open('madText.txt', 'w')
text = 'An ADJECTIVE, a NOUN, a VERB and an ADVERB and a NOUN.'
madText.write(text)
madText.close()
content = re.split('(\W+)', text)

for i in content:
    if i == 'NOUN':
        content.insert(content.index('NOUN'), input('Replace ' + i + ': '))
        content.remove('NOUN')
    elif i == 'VERB':
        content.insert(content.index('VERB'), input('Replace ' + i + ': '))
        content.remove('VERB')
    elif i == 'ADVERB':
        content.insert(content.index('ADVERB'), input('Replace ' + i + ': '))
        content.remove('ADVERB')
    elif i == 'ADJECTIVE':
        content.insert(content.index('ADJECTIVE'), input('Replace ' + i + ': '))
        content.remove('ADJECTIVE')

content = ''.join(content)
print(content)
madLibs = open('madText2.txt', 'w')
madLibs.write(content)
madLibs.close()

相关问题 更多 >

    热门问题