更改字符串中的字符然后返回字符串时出现问题

2024-03-29 07:00:32 发布

您现在位置: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

但是,我对translate函数并没有做太多(或者说什么都没有做),很难在Python文档之外找到一个好的演练。在

这是为学校准备的,我们不能使用Python3,我们必须使用Python2.7,所以我认为maketranslate不起作用。在


Tags: 代码comhttpnumberforgetfood字母
3条回答

尝试另一种方法:而不是替换字符,而是用转换后的字母从输入字符串创建新字符串。您可以迭代字符串的字符,如下所示:

for ch in a_string:
    print ch

一旦你能做到这一点,这只是一个问题,创建一个字母到数字的映射,你可以在那里查找字符并找到它对应的数字。如果在映射中获得匹配,则使用该匹配项(如果没有),则使用原始字符:

^{pr2}$

假设您有字母到数字的映射,您可以尝试以下操作:

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迭代映射的每个键(字母),用相应的数字替换字母。在

然而,由于这是针对学校的,这种方法可能有点晦涩(以一种不好的方式:),@inspector4dget的答案就是我要采用的方法。在

你要做的就是改变这个

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

为此:

^{pr2}$

说明

在您的方法中,您替换了原始电话号码中的一些字符,并将结果赋给一个名为newNumber的新变量。但是,您对newNumber什么也不做,所以它被丢弃了。在

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

相关问题 更多 >