2012-10-19 85 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