更改字符串中的字符然后返回字符串的麻烦

时间:2012-11-23 20:46:30

标签: python

代码太长了,不能在这里过去,所以它在PasteBin上:http://pastebin.com/UDPFYsLJ

我想要的是能够输入类似“555-GET-FOOD”的东西并获得“555-438-3663”。

我将代码更改为数字......只是在完全不同的行上。这是一个小摘录:

Number:  555-GET-FOO3
Number:  555-4ET-FOOD
Number:  555-GET-3OOD

它正在正确地改变字母并留下数字,但它们都在不同的行上。我知道我在for循环中运行它,但我希望对前一个循环所做的更改保持当前循环。

例如,如果第一个循环返回555-GET-FOO3,我希望下一个循环选择它以便它可以返回555-4ET-FOO3。

我只是不确定该怎么做。

任何提示都会很棒。我也一直在查看这个帖子:Removing a list of characters in string

但是,我在翻译功能方面做得不多(或者说,有什么用),并且很难在Python文档之外找到一个很好的演练。

这是针对学校的,我们不能使用Python 3,我们必须使用Python 2.7,所以我不认为maketranslate会起作用。

3 个答案:

答案 0 :(得分:4)

您所要做的就是改变这个

for i, j in dict.iteritems():
    newNumber = phoneNum.replace(i, j)
    print "Number: ",newNumber

到此:

for i, j in dict.iteritems():
    phoneNum = phoneNum.replace(i, j)
    print "Number: ",newNumber

<强>解释

在您的方法中,您替换原始电话号码中的某些字符,并将结果分配给名为newNumber的新变量。但是,你对newNumber什么都不做,所以它就会被扔掉。

相反,如果您使用翻译结果覆盖输入(phoneNum),那么您所做的任何新翻译都将使用新覆盖的phoneNum值进行,从而进行所有更改累积

答案 1 :(得分:1)

假设您有一个字母到数字的映射,您可以试试这个:

In [1]: s = '555-GET-FOOD'

In [2]: num_map = {'D': 3, 'F': 3, 'O': 6}

In [3]: reduce(lambda x, y: x.replace(y, str(num_map[y])), num_map, s)
Out[3]: '555-GET-3663'

这可以通过将字母映射到数字(num_map),然后使用reduce迭代映射的每个键(字母),将字母替换为相应的数字来实现。< / p>

然而,由于这是针对学校的,这种方法可能有点模糊(以一种糟糕的方式:)),@ inspectorG4dget的答案就是我要去的那个。

答案 2 :(得分:0)

尝试不同的方法:而不是替换字符,而是使用翻译的字母从输入字符串创建一个新字符串。您可以迭代字符串的字符,如下所示:

for ch in a_string:
    print ch

一旦你能做到这一点,只需要创建一个字母到数字的映射,你可以在其中查找一个字符并找到相应的数字。如果您在映射中获得匹配,则使用该匹配,否则,您将使用原始字符:

# Map of letters to digits: you'd pad this out.
letter_map = {'G': 4, 'E': 3, 'T': 7, 'D': 3}
def remap_phone_number(original):
    result = []
    for ch in original:
        result.append(letter_map[ch] if ch in letter_map else ch)
    return ''.join(result)