2011-11-17 5 views
13

プログラムの特定の部分を書くのに助けが必要です。 アイデアは、人がぎこちない言葉を入力し、プログラムが "!"に達するまで読むということです。 (感嘆符)例えばので:文字列がPythonの特定の文字に達するまで入力を解析する

input("Type something: ") 

人のタイプ:!私はそれだけでwolfdo65gtornadoを印刷し、それが「に達すると何かをカットしなければならない入力を印刷するプログラムを頼む場合wolfdo65gtornado

をsalmontiger223! "プログラムの残りの部分は、手紙を分析して数えていますが、私はすでにやるべきことを分かっています。私は最初の部分で助けが必要です。私はその本を見ようとしていたが、何かが欠けているようだ。

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

お手伝いできる場合は、本当にありがとうございます。ありがとう!

答えて

7
>>> s = "wolfdo65gtornado!salmontiger223" 
>>> s.split('!')[0] 
'wolfdo65gtornado' 
>>> s = "wolfdo65gtornadosalmontiger223" 
>>> s.split('!')[0] 
'wolfdo65gtornadosalmontiger223' 

それは「」の文字が発生したdoesntの場合、それはちょうどかかわらず、テキスト全体をつかむだろう。あなたは、出力エラーをしたい場合、それが一致しない場合は任意の「!」あなたはこのように行うことができます。

s = "something!something" 
if "!" in s: 
    print "there is a '!' character in the context" 
else: 
    print "blah, you aren't using it right :(" 
26

ビルトインstr.partition()方法はあなたのためにこれを行います。 str.split()とは異なり、strの残りの部分を別のstrに切断することはありません。

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

それは、違いはそのパーティションが保持されます "!" (実際には配列ではなくリストに出力されます): >>> s.partition( '!') ( 'wolfdo65gtornado'、 '!'、 'salmontiger223') >>> s.split( '!') ['wolfdo65gtornado'、 'salmontiger223'] >>> – Ole

+0

複数の '! ''文字がある場合は、リストを取得できませんそれらのすべての単一の1つで分割します。 –

+0

さて、あなたはそうです: 's '" wolfdo!65gtornado!salmo!ntig!er223 "' 's.split('! ')' '[' wolfdo '、' 65gtornado '、' salmo '、' ntig ' 、 'er223'] 'のようになります。そして、後で反復するならば、配列の2番目の位置にジャンプする必要はありません。 – Ole

6

希望する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' 
+0

私は変数f_name = 'file.txt' itertoolsの貴重なアイデアを使用している。私はこれを試しました。 bck_f_name = 'backup' .join(itertools.takewhile(lambda x:x == "。"、f_name)) bck_f_nameを 'filebackup.txt'として取得しようとしていますが、 私はこれを達成することができなかった.....任意の助けwud b相当 –

1

これを試してみてください。もちろん

s = "wolfdo65gtornado!salmontiger223" 
m = s.index('!') 
l = s[:m] 
関連する問題