[英]Print every character in a string before a specific character
phrase='!_#@%'
pun=''
string='dj_khaled'
for item in string:
if item not in phrase:
pun=pun+item
print(pun)
我的問題是,我得到的輸出是djkhaled而不是dj,所以基本上,我想在出現某些符號之前包括每個字符。 該字符串是字母數字。
每當一個字符不在phrase
,循環就會加倍到pun
,相反,您應該檢查一個字符是否在短語中並相應地break
。 在此之前,您要不斷向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
(?)的方法可能是使用一個布爾標志,該布爾標志指示是否看到了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)
還有另一種方法是使用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') )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.