【问题标题】:TypeError: translate() takes exactly one argument (2 given) [duplicate]TypeError:translate()只接受一个参数(给定2个)[重复]
【发布时间】:2017-03-27 09:18:37
【问题描述】:

我的代码在 python 2.x 版本上运行良好,但是当我尝试在 python 3.x 版本上运行它时,它给出了错误。

主题:需要缩写任何短信编码的消息。

代码:

def sms_encoding(data):
    #start writing your code here
    print(data)
    data.split(" ")
    data_list=data.split(" ")
    sms_encd=[]
    final_sms=""
    for i in range(len(data_list)):
        if data_list[i].lower() in  ['a','e','i','o','u']:
            sms_encd.append(data_list[i])
        elif len(data_list[i])>1:
            a = data_list[i].translate(None,'aeiouAEIOU')
            sms_encd.append(a)
    for j in range(len(sms_encd)):
        final_sms += str(sms_encd[j])+" "
    return final_sms[:-1]
data="I will not repeat mistakes"
print(sms_encoding(data)) 

输出:

2.x 版本:

I will not repeat mistakes
I wll nt rpt mstks

3.x 版本:

I will not repeat mistakes
Traceback (most recent call last):
  File "python", line 18, in <module>
  File "python", line 12, in sms_encoding
TypeError: translate() takes exactly one argument (2 given)

为什么translate() 不起作用?有没有替代的解决方法?

【问题讨论】:

  • 抱歉,我找不到现有的问题。谢谢你指出。

标签: python string python-2.7 python-3.x


【解决方案1】:

您需要比较 Python 3 的 str.translate() 和 Python 2 的 unicode.translate()。两者都采用从代码点(整数)到替换(另一个整数或单字符 Unicode e 字符串)的 映射

str 类型有一个静态方法str.maketrans(),它将要删除的字符(Python 2 的str.translate() 的第二个参数)作为第三个参数,以生成这样的映射。在这里使用它:

map = str.maketrans('', '', 'aeiouAEIOU')
a = data_list[i].translate(map)

这会输出一个字典,将每个元音代码点映射到None

>>> str.maketrans('', '', 'aeiouAEIOU')
{97: None, 101: None, 105: None, 111: None, 117: None, 65: None, 69: None, 73: None, 79: None, 85: None}

【讨论】:

  • 谢谢你,@Martijn Pieters。
猜你喜欢
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2021-12-04
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多