2012-10-19 105 views
-2

我需要返回給定的難題,其中每個字母字符都由HIDDEN字符替換。只替換字符串中的字母字符

HIDDEN = '^' 

def blah(r): 
    r = HIDDEN * len(r) 
    return r 

該函數用於替換我需要的任何字符串,但問題明確要求替換每個字母字符。

所以我不能有4'?被替換爲HIDDEN,因爲他們不是字母字符。

我應該怎麼辦?

+1

@sberry:作業代碼已[棄用](http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated)。 – DSM

+4

那麼,你會如何確定哪些字符是字母字符?當然你知道一些方法來做到這一點?循環所有字母?正則表達式?過濾?做一些事情來展示一個嘗試,也許我們可以幫助你「提煉」你的代碼。 – sberry

+0

@DSM,並被替換?我希望... – sberry

回答

6

一種方法:使用翻譯方法:

import string 

table = string.maketrans(string.ascii_letters, '^'*len(string.ascii_letters)) 

def blah(r): 
    return r.translate(table) 

另一種方法:使用re.sub

import re 

def blah(r): 
    return re.sub(r'[a-zA-Z]', r'^', r) 
+2

雖然這是一個完全合適的答案,但我們應該期待從OP中獲得更多的信息努力。 – sberry

+1

爲了未來的訪問者,我喜歡給出完整的答案。我在支持教學法和支持SO的意圖之間撕裂... – nneonneo

+0

Point made。它很糟糕,它必須變成這個。 – sberry

2

退房maketrans,您可以創建一個翻譯表從string.letters^,然後用它。

1

我總是發現maketrans是有點難以理解,所以我通常回落做這些事情(這使我更有意義)上更原始的方式:

def make_hidden(instr): 
    return ''.join(c if c.isalpha() else '^' for c in instr) 
+2

'c如果c.isalpha()否則'^''可能更乾淨;那麼你根本不需要'string.ascii_letters'。 – nneonneo

+0

@nneonneo - 極好的一點! (+1您的評論和您的原始答案) – mgilson

1

返回給定拼圖與每個字母字符替換爲隱藏字符。

HIDDEN = '^' 

def blah(r): 

    new_r = "" 

    for ch in r: 

     if ch in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ': 

      new_r += HIDDEN 

     else: 

      new_r += ch 

    return new_r