2011-11-17 43 views
13

我需要幫助來嘗試編寫程序的某個部分。 這個想法是,一個人會輸入一堆亂碼,程序會讀它直到達到「!」 (驚歎號),因此,例如:分析字符串輸入,直到它到達Python上的某個字母

input("Type something: ") 

人類型:wolfdo65gtornado salmontiger223

如果我讓程序打印輸入它應該只打印wolfdo65gtornado,一旦達到削減什麼「! 「該程序的其餘部分是分析和計算字母,但這些部分我已經知道該怎麼做。我只需要第一部分的幫助。我一直試圖翻閱這本書,但似乎我錯過了一些東西。

我在想,也許利用for循環,然後對其設置限制,但我無法弄清楚如何使隨機推定的字符串輸入分析某個字符,然後擺脫其餘。

如果你能幫忙,我會真的很感激。謝謝!

回答

7
>>> 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 :(" 
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

我在說,如果有多個''!''字符,你不會得到一個列表與他們每一個人的分裂。 –

+0

好吧,是的,你會:'s =「wolfdo!65gtornado!salmo!ntig!er223」' 's.split('!')''''wolfdo','65gtornado','salmo','ntig' ,'er223']',你不必跳過數組中的每一個第二個位置,就像你使用r分配 – 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' 但是我無法做到這一點.....任何幫助可見b –

1

試試這個:

s = "wolfdo65gtornado!salmontiger223" 
m = s.index('!') 
l = s[:m] 
相關問題