描述

输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格(有可能多于1个空格),统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。

输入

一个英文句子

输出

一个整数,单词数量
此题可以对字符串进行遍历,根据要求统计空格前后的单词数量,当前字符为空格且后一个字符不是空格时,单词数量增1。需要注意的是,如果字符串是以空格开始,则计数器从0开始,否则从1开始。

  1. import string # 导入string模块,如下面不用字符串常量,直接用字符串代替的话,此语句可以省略
  2. s = input() # 输入一个字符串
  3. if s[0] == ' ': # 如果字符串以空格开头,计数器置0
  4. count = 0
  5. else: # 如果字符串不是以空格开头,计数器置1
  6. count = 1
  7. for i in range(len(s)): # 根据字符串长度进行遍历
  8. # 如果当前字符是空格,而且下一个字符是字母或数字(题目明确说标点符号不计)时,计数加增1
  9. # string.ascii_letters+string.digits可用以下字符串代替:
  10. # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
  11. if s[i] == ' ' and s[i+1] in string.ascii_letters+string.digits:
  12. count = count + 1
  13. print(count) # 结束循环后输出计数

上面做法是模仿C语言的编程模式,实际上,python提供了一个非常易用的函数split()可以用于求解此问题。
从题目要求可以知道,只要根据空格对字符串进行切分就可以,此处可以利用str.split()函数,结果为列表,用len()函数返回列表的长度即为其中单词的数量。

  1. s = input() # 输入一个字符串
  2. ls = s.split() # 函数无参数时,根据空格进行切分,注意多个空格会被当成一个空格处理
  3. print(len(ls)) # 输出列表的长度,值即为列表中单词的数量,也就是字符串中单词的数量
  4. # 上述 3 条语句可以用下面一条语句实现
  5. print(len(input().split()))
  6. # 输入 Life is short, you need Python!
  7. # 输出 6
  8. # 输入 Life is short, you need Python!
  9. # 输出 6

觉见问题:
有同学习惯用空格字符串 ‘ ‘ 作为切分依据,此时,遇到一个空格就会切分一次,注意到题目说明单词间可能是多于一个空格,如果用 空格做为切分依据,当输入的字符串中存在用多个空格分隔单词时,切分结果的列表中就会出现一些空字符串元素,测试长度时,空字符串也是列表的元素,会被计数,会导致计算单词数量错误。

  1. s = input().split() # 无参数,默认用空格字符串作切分符号,多个空格作为一个空格处理
  2. print(s) # ['Life', 'is', 'short,', 'you', 'need', 'Python!']
  3. print(len(s)) # 6
  4. s = input().split(' ') # 用一个空格字符串做切分符号
  5. print(s) # ['Life', 'is', 'short,', 'you', 'need', 'Python!']
  6. print(len(s)) # 6
  7. # 当输入字符串每个单词间均只有一个空格时 Life is short, you need Python! ,输出是相同的,长度都是6
  8. # ['Life', 'is', 'short,', 'you', 'need', 'Python!'] 6
  9. # 当输入字符串每个单词间有多于一个空格时 Life is short, you need Python! ,输出是不同的,
  10. # ['Life', 'is', 'short,', 'you', 'need', 'Python!'] 6
  11. # ['Life', '', 'is', 'short,', 'you', '', '', 'need', 'Python!'] 9