我的 if 语句没有延续到最终输出。一个更改了字符串,而其他的则没有,但似乎应该这样做。我怎样才能解决这个问题?

Posted

技术标签:

【中文标题】我的 if 语句没有延续到最终输出。一个更改了字符串,而其他的则没有,但似乎应该这样做。我怎样才能解决这个问题?【英文标题】:My if statements are not carrying over to the final output. One changes the string and the others don't but seem like they should. How can I fix this? 【发布时间】:2021-10-26 16:00:28 【问题描述】:

我正在尝试获取用户输入字符串并以各种方式对其进行操作以使其更好,例如添加“?”如果在第一个单词中存在问题指示符,或者用“。”替换句尾的拼写错误,例如“,”。

当我测试每个单独的部分时,它似乎可以正常工作,并且在将字符串添加到 sentence_maker('something like this') 时立即一切正常,但随后我添加了 while 循环以启用用户输入,似乎 if语句并不是每个都将它们的修改应用于字符串,它只是将第一个字母大写,但没有做任何其他事情。

我做了很多菜鸟的事情,比如短语 = 短语[:-1] + '.',但我在最后的列表中也不断得到 typenone 项。

def sentence_maker(phrase):

    question_indicators = ('What', 'Where', 'When', 'Why', 'Which', 'Who', 'Whose', 'How', 'Is', 'Does')

    # if string begins wither lowercase, upper it, 2.
    if phrase[0].islower():
        return phrase[0].upper() + phrase[1:]

    # if last index in string == ',','?', delete and add '.', 1.
    if phrase[-1] in [',', '?']:
        return phrase[:-1] + '.'

    #add a '.', 1
    if phrase[-1] not in ['.','!']:
        return phrase + '.'

    # if string begins with question indicator, add a ?, 1.
    if phrase.startswith(question_indicators) and phrase.split()[-1][-1] in ['.','!',',']:
        return phrase[:-1] + '?'

results = []

while True:
    phrase = input('Enter your text here, good sir: ') 
    if phrase == '\end':
        break
    else:
        results.append(sentence_maker(phrase))
    
print(results) 

【问题讨论】:

return 在每个 if 中。只要有一个if 条件匹配,就会应用其操作并返回结果。函数随即结束。 你需要在函数末尾return修改后的字符串once... 您需要在每个 if 语句中将更改后的短语分配回自身。例如,phrase = phrase[0].upper() + phrase[1:] 然后return phrase 在函数的末尾 【参考方案1】:

正如评论中已经指出的那样,一旦第一个 if 语句匹配,您就会停止处理该短语。如果要执行所有步骤,请更改 return 语句,例如进入重新分配。

但是,您的逻辑似乎相当不一致。我会将其重构为

def sentence_maker(phrase):
    question_indicators = ('What', 'Where', 'When', 'Why', 'Which', 'Who', 'Whose', 'How', 'Is', 'Does')

    # if string begins wither lowercase, upper it, 2.
    phrase = phrase[0].upper() + phrase[1:]

    # if phrase ends with punctuation, remove it
    if phrase.endswith((',', '?', '.', '!')):
        phrase = phrase[:-1]

    # if string begins with question indicator, endpunc is ?
    if phrase.startswith(question_indicators):
        endpunc = '?'
    else:
        endpunc = '.'

    phrase += endpunc

    return phrase

选择强制第一个字符大写,即使它是不必要的,这有点可疑,但我的直觉是避免条件比避免不必要的大写更快。

其他变化侧重于重组尾标的处理;我们删除任何最后的标点符号,然后添加一些东西。我的感觉是,如果您的需求随着时间的推移而变化,这将更容易理解和更新。

问题指标有些问题;当它们是问题指示符时,您可能希望匹配“Whichever”和“However”,但后者通常不是;另一方面,许多以“Is”开头的词不是问题指示符(“Issue”、“Island”等) - 添加空格可以解决这些问题,但需要您添加更多以“What”结尾的词, “Which”、“Who”等(所以“Whatever”、“Whichever”等)。我还注意到缺少“Isn't”和“Are”及其否定词,以及“Would”、“Should”、“Must”、“Have”、“Has”等助动词。

【讨论】:

还有“Whom”,虽然很少有人正确使用它,也许你应该把它改成“Who”!

以上是关于我的 if 语句没有延续到最终输出。一个更改了字符串,而其他的则没有,但似乎应该这样做。我怎样才能解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

输出文本字符串的多个单元格的电子表格 IF 语句

Jinja条件语句(if / else)和{{py模型输出}}

Python笔记---DAY1:基本操作if语句

C ++将char值设置为字符串?

为啥 if 语句没有打印出字符串? cpp

无论用户输入如何,我的基于用户输入和 if/else 语句的函数都会给出相同的输出[重复]