Python挑战练习-进阶挑战37
编写一个程序来判断一个句子是否为标题文本。
-
定义函数
is_title()
,参数为一个句子。 -
在函数内,如果句子中的每个单词都以大写字母开头,则返回
True
,否则返回False
。
思路:
①要判断每个单词,首先想到要把输入的句子用split进行分割
②判断分割后每个单词是否以大写字母开头
方法一:
def is_title(sentence):
# 在此处编写代码
words=sentence.split()
for word in words:
if word and not word[0].isupper():
return False
return True
# 从用户处获取输入
input_sentence = input()
# 调用函数
print(is_title(input_sentence))
解释:
-
首先通过
words = sentence.split()
将输入的句子按照空格进行分割,得到一个包含句子中各个单词的列表。 -
然后使用
for word in words:
循环遍历这个单词列表中的每一个单词。在循环中,通过if word and not word[0].isupper():
进行判断:word
用于判断当前单词是否为空字符串,因为如果是空字符串,获取其第一个字符去判断是否为大写字母会导致报错,所以先确保单词不为空。not word[0].isupper()
用于判断当前单词的第一个字符是否不是大写字母,如果不是大写字母,就说明句子不符合每个单词都以大写字母开头的要求,此时直接返回False
。(即非空+不是大写字母开头,返回False) -
当整个循环结束后,都没有发现不符合要求的单词,说明句子中的每个单词都以大写字母开头,此时返回
True
。
方法二:使用列表推导式和all
函数判断(更简洁)
def is_title(sentence):
words = sentence.split()
return all(word and word[0].isupper() for word in words)
解释:
-
(word and word[0].isupper() for word in words)
来生成一个可迭代对象,它会遍历每个单词,对于每个单词,通过word and word[0].isupper()
判断:如果单词不为空(word
)且其第一个字符是大写字母(word[0].isupper()
),就返回True
,否则返回False
,这样就生成了一个由一系列布尔值组成的可迭代对象。 -
最后使用
all
函数,all
函数会检查可迭代对象中的所有元素是否都为True
,如果都是True
,说明句子中的每个单词都满足以大写字母开头的条件,此时all
函数返回True
,也就是整个句子符合标题文本的要求,直接将all
函数的返回值作为is_title
函数的返回值返回;如果可迭代对象中有元素为False
,all
函数返回False。
方法二总结:对每个单词检查,返回一个由布尔值组成的对象,再用all函数检查这个对象。
标签:单词,word,sentence,是否,标题,大写字母,字符串,False,句子 From: https://blog.csdn.net/m0_47089558/article/details/145062346