pK.*_*pK. 2 python string python-2.7 python-3.x
我的代码在python 2.x版本上运行正常但是当我试图在python 3.x版本上运行它时,它给出了错误.
subject:需要缩写sms编码中的任何消息.
码:
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))
Run Code Online (Sandbox Code Playgroud)
输出:
2.x版本:
I will not repeat mistakes
I wll nt rpt mstks
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
为什么translate()不工作?还有其他替代方法吗?
您需要将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)
Run Code Online (Sandbox Code Playgroud)
这会输出一个字典,将每个元音代码点映射到None:
>>> str.maketrans('', '', 'aeiouAEIOU')
{97: None, 101: None, 105: None, 111: None, 117: None, 65: None, 69: None, 73: None, 79: None, 85: None}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6786 次 |
| 最近记录: |