代码太长了,不能在这里过去,所以它在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会起作用。
答案 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)