描述
输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格(有可能多于1个空格),统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。
输入
输出
一个整数,单词数量
此题可以对字符串进行遍历,根据要求统计空格前后的单词数量,当前字符为空格且后一个字符不是空格时,单词数量增1。需要注意的是,如果字符串是以空格开始,则计数器从0开始,否则从1开始。
import string # 导入string模块,如下面不用字符串常量,直接用字符串代替的话,此语句可以省略
s = input() # 输入一个字符串
if s[0] == ' ': # 如果字符串以空格开头,计数器置0
count = 0
else: # 如果字符串不是以空格开头,计数器置1
count = 1
for i in range(len(s)): # 根据字符串长度进行遍历
# 如果当前字符是空格,而且下一个字符是字母或数字(题目明确说标点符号不计)时,计数加增1
# string.ascii_letters+string.digits可用以下字符串代替:
# 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
if s[i] == ' ' and s[i+1] in string.ascii_letters+string.digits:
count = count + 1
print(count) # 结束循环后输出计数
上面做法是模仿C语言的编程模式,实际上,python提供了一个非常易用的函数split()可以用于求解此问题。
从题目要求可以知道,只要根据空格对字符串进行切分就可以,此处可以利用str.split()函数,结果为列表,用len()函数返回列表的长度即为其中单词的数量。
s = input() # 输入一个字符串
ls = s.split() # 函数无参数时,根据空格进行切分,注意多个空格会被当成一个空格处理
print(len(ls)) # 输出列表的长度,值即为列表中单词的数量,也就是字符串中单词的数量
# 上述 3 条语句可以用下面一条语句实现
print(len(input().split()))
# 输入 Life is short, you need Python!
# 输出 6
# 输入 Life is short, you need Python!
# 输出 6
觉见问题:
有同学习惯用空格字符串 ‘ ‘ 作为切分依据,此时,遇到一个空格就会切分一次,注意到题目说明单词间可能是多于一个空格,如果用 空格做为切分依据,当输入的字符串中存在用多个空格分隔单词时,切分结果的列表中就会出现一些空字符串元素,测试长度时,空字符串也是列表的元素,会被计数,会导致计算单词数量错误。
s = input().split() # 无参数,默认用空格字符串作切分符号,多个空格作为一个空格处理
print(s) # ['Life', 'is', 'short,', 'you', 'need', 'Python!']
print(len(s)) # 6
s = input().split(' ') # 用一个空格字符串做切分符号
print(s) # ['Life', 'is', 'short,', 'you', 'need', 'Python!']
print(len(s)) # 6
# 当输入字符串每个单词间均只有一个空格时 Life is short, you need Python! ,输出是相同的,长度都是6
# ['Life', 'is', 'short,', 'you', 'need', 'Python!'] 6
# 当输入字符串每个单词间有多于一个空格时 Life is short, you need Python! ,输出是不同的,
# ['Life', 'is', 'short,', 'you', 'need', 'Python!'] 6
# ['Life', '', 'is', 'short,', 'you', '', '', 'need', 'Python!'] 9