在“首先学习编码”中,有一个简短的练习,涉及创建一个函数来替换文本中的占位符。如果占位符的结尾是!!!!!,则此代码仅返回最后一个感叹号。我们如何修改代码,以便当用户提供单词SPAM代替NOUN !!!,作为输入时,processed_line将返回SPAM !!!,?
这是代码:
placeholders = ['NOUN', 'VERB_ING', 'ADJECTIVE', 'VERB']
endings = ['.', ',', ';', ':', '?', '!']
def process_line(line):
global placeholders
global endings
processed_line = ''
words = line.split()
for word in words:
stripped = word.strip(',.;:?!')
if stripped in placeholders:
answer = input(f'Enter a {stripped}:')
processed_line = processed_line + answer
if word[-1] in endings:
processed_line = processed_line + word[-1] + ' '
else:
processed_line = processed_line + ' '
else:
processed_line = processed_line + word + ' '
return processed_line + '\n'
您首先删除了标点符号。请稍后再添加它们,它应该可以正常工作:
placeholders = ['NOUN', 'VERB_ING', 'ADJECTIVE', 'VERB']
endings = ['.', ',', ';', ':', '?', '!']
def process_line(line):
global placeholders
global endings
processed_line = ''
words = line.split()
def keep(string, chars):
return ''.join([i for i in string if i in chars])
for word in words:
stripped = word.strip(',.;:?!')
leftovers = keep(word, ',.;:?!')
if stripped in placeholders:
loc = placeholders.index(stripped)
answer = input(f'Enter a {stripped}:')
processed_line += answer + leftovers # here is what's new
if word[-1] in endings:
processed_line = processed_line + word[-1] + ' '
else:
processed_line = processed_line + ' '
else:
processed_line = processed_line + word + ' '
return processed_line + '\n'
print(process_line('hello, NOUN! I am Joe.'))