0

我必须用 Python 编写一个程序,它要求用户输入一个字符串,它只打印出那些以“s”或“S”开头的单词。我正在使用该.split函数来创建单词列表。但是,我无法弄清楚如何让 Python 识别那些以“s”或“S”开头的单词。非常感谢任何建议或帮助!

4

5 回答 5

2

您可以将字符串的方法与将字符串转换为全小写字母的方法startswith结合使用。lower

words = raw_input().split()
for word in words:
    if word.lower().startswith('s'):
        # do something

startswith当且仅当调用字符串以您作为参数传递给它的子字符串开头时,该方法才会返回 True。

于 2013-10-17T00:59:45.607 回答
2

我会使用这样.lower的字符串方法:

>>> mystr = 'Super Sally rode a super ship.'
>>> [x for x in mystr.split() if x.lower()[0] == 's']
['Super', 'Sally', 'super', 'ship.']
>>>

您也可以使用该.startswith方法而不是在位置 0 处索引字符串:

# This method, while longer, is really clear as to what's going on.
[x for x in mystr.split() if x.lower().startswith('s')]
于 2013-10-17T00:55:52.743 回答
1

借用@iCodez 的精彩示例字符串 - 这是一个正则表达式方法:

>>> import re
>>> mystr = 'Super Sally rode a super ship.'
>>> re.findall(r's\S+', mystr, flags=re.I)
['Super', 'Sally', 'super', 'ship.']

这样就不必将字符串拆分并显式规范化大小写以进行比较。

此外,您可以稍微调整它以不捕获不需要的标点符号,例如:

>>> re.findall(r's\w+', mystr, flags=re.I)
['Super', 'Sally', 'super', 'ship']
于 2013-10-17T01:02:02.910 回答
0

使用startswithhttp://docs.python.org/2/library/stdtypes.html#str.startswith

for x in your_string.split():
    if x.upper().startswith('S'):
        print x
于 2013-10-17T00:58:29.573 回答
0

startswith实际上需要一个元组。

所以:

words = raw_input()
print [word for word in words.split() if word.startswith(('s', 'S'))]

听起来很像英语,而且很容易阅读。我更喜欢它.lower()

于 2013-10-17T08:40:55.867 回答