phrase='!_#@%'
pun=''
string='dj_khaled'
for item in string:
if item not in phrase:
pun=pun+item
print(pun)
私の問題は、djkhaledがdjでなければなりません。基本的に、いくつかのシンボルが発生する前にすべての文字を含めることです。文字列は英数字です。特定の文字の前に文字列内のすべての文字を表示します。
phrase='!_#@%'
pun=''
string='dj_khaled'
for item in string:
if item not in phrase:
pun=pun+item
print(pun)
私の問題は、djkhaledがdjでなければなりません。基本的に、いくつかのシンボルが発生する前にすべての文字を含めることです。文字列は英数字です。特定の文字の前に文字列内のすべての文字を表示します。
あなたのループは、文字がphrase
でないとき、文字がフレーズに応じbreak
にある場合は、代わりにあなたがチェックする必要がありpun
に追加されます。それまでは、あなたが継続的にpun
に文字を追加します。
for item in string:
if item in phrase:
break
pun += item
それは正しく"dj"
を出力し、実行するとき。以前のアプローチは十分ではない場合
またitertools
からtakewhile
を検討することもでき:
>>> "".join(takewhile(lambda x: x not in phrase, string))
"dj"
break
かどうかを示すbooleanフラグを使用してすることができました(?) phrase
の値は、あなたがpun
かに追加するかどうかを決定する際、あなたが、その上で行動することができ、見られた:
phrase='!_#@%'
pun=''
string='dj!khaled'
seen = False
for item in string:
if item in phrase:
seen = True
if not seen:
pun += item
print(pun)
あなたは、インデックスを使用して、より簡単に行うことができますindex
方法で:
pun = string[:string.index(phrase)]
print(pun)
我々は、複数の「フレーズ」を持っている場合、一部の文字列ではないかもしれません。
phrase=['_','j','z']
pun = string[:min([string.index(i) for i in phrase if i in string])]
print(pun)
フレーズが部分文字列でないとエラーになります文字列の単純な 'if phrase in string:' checkはそれを '修正'するのに十分でしょう。 – Nf4r
さらに別の方法がwhile
ループ
forbidden ='!_#@%'
string='dj_khaled'
result =""
i = 0
while i<len(string) and string[i] not in forbidden:
result = result + string[i]
i = i+1
print(result)
しかし、これはネジ止めがより簡単ですが、機能的にはJinの最初の例でbreak
を使用するのと同じです。私はコメントで言及
と機能バージョン私のような複数のシンボルを持っている場合、どのような
def myfun(string):
forbidden ='!_#@%'
result = ""
for c in string:
if c in forbidden:
return result #normally here you put the break
result = result + c
return result
print(myfun('dj_khaled'))
! - # – CAVS
は、あなたが任意の(項目== I iのフレーズで) '場合に'使用することができます'break 'の前に評価する。 –
これを行うための別の方法があります。ブレークを使用したくないです。 – CAVS