web-dev-qa-db-ja.com

Pythonで特定の文字に到達するまで文字列入力を分析する

プログラムの特定の部分を記述しようとすると、助けが必要です。アイデアは、人が大量の意味不明な言葉を入力し、プログラムが「!」に達するまでそれを読み取るというものです。 (感嘆符)そのため、たとえば:

input("Type something: ")

人のタイプ:wolfdo65gtornado!salmontiger22

入力を印刷するようにプログラムに要求すると、wolfdo65gtornadoそして、「!」に到達したら何でもカットしますプログラムの残りの部分では、文字の分析とカウントが行われますが、それらの部分はすでに方法を知っています。最初の部分で助けが必要です。私は本に目を通そうとしましたが、何かが欠けているようです。

おそらくforループを利用してから制限をかけることを考えていますが、特定の文字に対してランダムに代入された文字列入力を分析し、残りを取り除く方法を理解することはできません。

あなたが助けることができれば、私は本当に感謝します。ありがとう!

21
anu_clarset

組み込みの str.partition() メソッドがこれを行います。 str.split() とは異なり、strの残りを別のstrsにカットすることはありません。

text = raw_input("Type something:")
left_text = text.partition("!")[0]
39
Michael Hoffman
>>> 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 :("
11
Ole

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'

これを試して:

s = "wolfdo65gtornado!salmontiger223"
m = s.index('!')
l = s[:m]
4
Mohammad

受け入れられた答えを説明するため。

分割

partition()関数は、リスト内の文字列を3つの要素で分割します。

_mystring = "123splitABC"
x = mystring.partition("split")
print(x)
_

あげる:

_('123', 'split', 'ABC')_

アクセスリスト要素のように:

print (x[0]) ==> 123

print (x[1]) ==> split

print (x[2]) ==> ABC

0
Harvey