在Python中分析字符串输入直到达到某个字母

46 投票
8 回答
146310 浏览
提问于 2025-04-17 06:29

我需要帮助来写程序的某个部分。这个程序的想法是,用户输入一堆乱七八糟的文字,程序会读取这些文字,直到遇到一个“!”(感叹号)。比如说:

input("Type something: ")

用户输入:wolfdo65gtornado!salmontiger223

如果我让程序打印这个输入,它应该只打印 wolfdo65gtornado,一旦遇到“!”就停止,后面的内容就不管了。程序的其他部分是分析和统计字母,但那些我已经会了。我只需要帮助处理第一部分。我一直在翻书,但似乎缺少了一些东西。

我在想,也许可以用一个 for 循环,然后对它设置一些限制,但我不知道怎么让程序分析输入的随机字符串,找到特定的字符,然后把后面的内容去掉。

如果你能帮我,我会非常感激。谢谢!

8 个回答

8

你需要用到 itertools.takewhile() 这个功能。

>>> s = "wolfdo65gtornado!salmontiger223"
>>> '-'.join(itertools.takewhile(lambda x: x != '!', s))
'w-o-l-f-d-o-6-5-g-t-o-r-n-a-d-o'



>>> s = "wolfdo65gtornado!salmontiger223!cvhegjkh54bgve8r7tg"
>>> i = iter(s)
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
'w-o-l-f-d-o-6-5-g-t-o-r-n-a-d-o'
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
's-a-l-m-o-n-t-i-g-e-r-2-2-3'
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
'c-v-h-e-g-j-k-h-5-4-b-g-v-e-8-r-7-t-g'
19
>>> s = "wolfdo65gtornado!salmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornado'
>>> s = "wolfdo65gtornadosalmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornadosalmontiger223'
s = "something!something"
if "!" in s:
  print "there is a '!' character in the context"
else:
  print "blah, you aren't using it right :("

如果它没有遇到一个!字符,它就会把整个文本都抓取过来。如果你想在没有匹配到任何!的时候输出一个错误信息,你可以这样做:

71

内置的 str.partition() 方法可以帮你完成这个任务。跟 str.split() 不同的是,它不会把字符串的其余部分切成多个部分。

text = raw_input("Type something:")
left_text = text.partition("!")[0]

解释

str.partition() 会返回一个包含三个部分的元组:字符串的开头、分隔符和结尾。在这个例子中,我们只需要第一个部分,所以可以用 [0] 来获取它。例如:

"wolfdo65gtornado!salmontiger223".partition("!")

返回

('wolfdo65gtornado', '!', 'salmontiger223')

撰写回答