簡體   English   中英

在特定字符之前打印字符串中的每個字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM