siv*_*udh 18 python python-3.x
我是一个Python新手.
为什么这在Python 3.1中不起作用?
from string import maketrans # Required to call maketrans function.
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)
str = "this is string example....wow!!!";
print str.translate(trantab);
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我得到以下代码:
Traceback (most recent call last):
File "<pyshell#119>", line 1, in <module>
transtab = maketrans(intab, outtab)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/string.py", line 60, in maketrans
raise TypeError("maketrans arguments must be bytes objects")
TypeError: maketrans arguments must be bytes objects
Run Code Online (Sandbox Code Playgroud)
"必须是字节对象"是什么意思?如果有可能,有人可以帮助发布Python 3.1的工作代码吗?
小智 33
您不需要使用bytes.maketrans()何时str更简单并且不需要'b'前缀:
print("Swap vowels for numbers.".translate(str.maketrans('aeiou', '12345')))
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 16
通过阅读Python 2文档停止尝试学习Python 3.
intab = 'aeiou'
outtab = '12345'
s = 'this is string example....wow!!!'
print(s.translate({ord(x): y for (x, y) in zip(intab, outtab)}))
Run Code Online (Sandbox Code Playgroud)
S.L*_*ott 11
字符串不是字节.
这是Python 3中的一个简单定义.
字符串是Unicode(不是字节)Unicode字符串使用"..."或'...'
字节是字节(不是字符串)字节字符串使用b"..."或b'...'.
使用b"aeiou"创建某些字母的ASCII码组成的字节序列.
在Python 3中,string.maketrans()功能已被废弃,由新的静态方法所取代,bytes.maketrans()和bytearray.maketrans().
此更改解决了字符串模块支持哪些类型的混淆.
现在str,bytes和bytearray每个人都有自己maketrans和translate方法与适当类型的中间转换表.
小智 5
"this is string example....wow!!!".translate(str.maketrans("aeiou","12345"))
Run Code Online (Sandbox Code Playgroud)
这有效,并且不需要其他字节转换。我不知道为什么使用字节而不是str的原因。
| 归档时间: |
|
| 查看次数: |
49141 次 |
| 最近记录: |