2016-10-05 2 views
0

Я хочу поставить AEM в скобки, так что текст будет выглядеть следующим образом: Agnico Eagle Mines Limited (AEM)Я хочу поставить линеечки в скобках

text = "Agnico Eagle Mines Limited AEM" 
def add_brackets(test): 
    for word in test: 
     if word.isupper(): 
      word = "(" + word + ")" 
    print(test) 

print(add_brackets(text)) 

Что не так с кодом? Я получаю исходный текст.

+0

Вы не изменили «тест», таким образом, он всегда будет печатать исходную строку. Когда вы перебираете и меняете слово, это изменение не отражается автоматически в исходной строке. –

+0

Вам нужно «возвратить» что-то ... – blacksite

ответ

1

Две вещи, 1 вы проверяете на каждого персонажа, а не на слово. 2 вы не изменяете text, вы просто устанавливаете word и ничего не делаете с ним.

text = "Agnico Eagle Mines Limited AEM" 


def add_brackets(test): 
    outstr = "" 
    for word in test.split(" "): 
     if word.isupper(): 
      outstr += " (" + word + ")" 
     else: 
      outstr += " " + word 
    return outstr.strip() 


print(add_brackets(text)) 

Edit навороченные

text = "Agnico Eagle Mines Limited AEM" 


def add_brackets(test): 
    return " ".join(["({})".format(word) if word.isupper() else word for word in test.split(" ")]) 

print(add_brackets(text)) 
+0

спасибо за четкое объяснение! – datalearner

0

Это будет довольно кратким с регулярным выражением замещения:

>>> import re 
>>> text = "Agnico Eagle Mines Limited AEM" 
>>> re.sub(r'\b([A-Z]+)\b', r'(\1)', text) 
'Agnico Eagle Mines Limited (AEM)' 

Это выглядит для нескольких прописных символов вместе с границами слова (например, пробел) с другой стороны, затем заменяет сопоставленную группу тем же текстом (\1) с добавлением круглых скобок.

В функции:

>>> import re 
>>> def add_brackets(s): 
...  return re.sub(r'\b([A-Z]+)\b', r'(\1)', s) 
... 
>>> print(add_brackets(text)) 
Agnico Eagle Mines Limited (AEM) 
Смежные вопросы