原题解答
本次的题目如下所示(原题出处:蓝桥杯):
【编程实现】
输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数并输出。
输入描述:输入一行字符
输出描述:按英文字母、空格、数字和其它字符的顺序输出其对应的个数
【样例输入】
a1 b2 c d4 !!! 5
【样例输出】
4
5
4
3
本题的要求非常明确,要求统计不同类型的字符的数量,包括字母、空格、数字和其他字符。很明显,我们需要对字符串的内容进行遍历,并对每一个字符做判断。
这一题如果熟悉Python字符串中的is开头的几个方法,这些方法的返回值类型都是布尔值,那本题就非常容易了,我们看看这几个方法的含义:
方法名称 | 含义 |
---|---|
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False |
string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. |
string.isdigit() | 如果 string 只包含数字则返回 True 否则返回 False. |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
string.isnumeric() | 如果 string 中只包含数字字符,则返回 True,否则返回 False |
string.isspace() | 如果 string 中只包含空格,则返回 True,否则返回 False. |
string.istitle() | 如果 string 是标题化的(即单词首字母大写)则返回 True,否则返回 False |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
知道了这几个方法的含义,我们很明显就能看出,在遍历每个字符的时候,分别使用isalpha()、isspace()、isdigit()三个方法可以判断字符是否为字母、空格、数字,如果都不是则为其他。代码如下所示:
s = input()
alpha, space, num, other = 0, 0, 0, 0
for i in s:
if i.isalpha():
alpha += 1
elif i.isspace():
space += 1
elif i.isdigit():
num += 1
else:
other += 1
print(alpha, space, num, other, sep='\n')
有人可能会想,如果我不记得这几个方法,那这道题怎么做呢?数字一共10个、字母大小写加起来52个、空格只有1个。我们可以将它们全部列举出来,使用in运算符进行判断,这道题一样可以做出来。我们看代码:
s = input()
alpha, space, num, other = 0, 0, 0, 0
alphas = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
nums = '0123456789'
for i in s:
if i in alphas:
alpha += 1
elif i == ' ':
space += 1
elif i in nums:
num += 1
else:
other += 1
print(alpha, space, num, other, sep='\n')
本题拓展
本题考查的是字符串的相关方法,题目难度★★
字符串的方法的题型可以从很多方面去考,主要离不开字符串的索引、字符串的切片、字符串的方法等等。题型是多变的,关键是熟悉字符串的相关操作。我们看下面这道题目:
某 E 写了一篇文章,标题为字符串 S,由小写英文字符和空格组成。
某 E 恪守规范,因此,字符串 S 是由若干个单词组成的,单词之间由一个空格隔开。
编辑人员要求将单词中的字母的大小写做调整。具体的,对每个单词,编辑人员要求将每个单词中的第奇数个字母改成大写,第偶数个字母改成小写。
关于单词下标的定义:这里我们以 1 为起始下标。也就是说,对一个长度为 n 的单词,我们将字母从头到尾记作第一个、第二个、⋯、第 n 个。
举例:对单词 apple
第一个字母为 a
第二个字母为 p
第三个字母为 p
第四个字母为 l
第五个字母为 e
某 E 要赶 ddl,请你帮她完成这个任务。输入格式
输入一行一个字符串 S。输出格式
输出一行一个字符串,代表修改后的标题。输入样例
i like eat apple
输出样例I LiKe eAt aPpLe
这道题目的要求是:奇数位的字母大写、偶数位的字母小写。题目本身不难,只需要对奇数位上的字母使用upper()方法改成大写即可。但是这道题我们要注意:第一个字母序号为1,但是索引为0。因此,在代码中奇偶正好相反。否则我们得到的结果也是相反的。本道题的代码如下:
s = input()
r = ''
for i, v in enumerate(s):
if i % 2 == 0:
r += v.upper()
else:
r += v
print(r)