首页 > 解决方案 > 紧凑的if循环python

问题描述

我想用 Python 中的 def 返回这些结果:

title_case('a clash of KINGS', 'a an the of') # should return: 'A Clash of Kings'
title_case('THE WIND IN THE WILLOWS', 'The In') # should return: 'The Wind in the Willows'
title_case('the quick brown fox') # should return: 'The Quick Brown Fox'

解决方案可以是这样的:

def title_case(title, minor_words=''):
    title = title.capitalize().split()
    minor_words = minor_words.lower().split()
    return ' '.join([word if word in minor_words else word.capitalize() for word in title])

我无法理解最后一行。我从中得到的是:如果 'word' 在 'minor_words' 中,则加入 'minor_words' ==> 这不是我们想要的。我们想加入“标题”

第二个问题是关于这个解决方案的第一行。为什么有=''?我试着写有和没有这个的“minor_words”,输出是一样的。

标签: pythonlist-comprehension

解决方案


如果“word”在“minor_words”中,则加入“minor_words”

不,不是这个意思。

word if word in minor_words表示如果word在 中minor_words,我们加入word(这是来自 的词title)。

else word.capitalize()表示如果word不在我们minor_words加入大写单词。

为什么会有=''

这为参数提供了默认值minor_words。在最后一个示例中,您只使用一个参数调用函数:

title_case('the quick brown fox')

它相当于:

title_case('the quick brown fox', '')

如果没有默认值,您将收到一个错误,即没有提供足够的参数。


推荐阅读