Python 3中的Unicode字符与Python 2
我已经在python 2中编写了一个简单的脚本来训练我对平假名字母的了解。请参阅下面的代码:Python 3中的Unicode字符与Python 2
import random
ROMAJI = ['A','I','U','E','O','KA','KI','KU','KE','KO','SA','SHI','SU','SE','SO','TA','CHI','TSU','TE','TO','NA','NI','NU','NE','NO']
romaji_letter = random.choice(ROMAJI)
romaji_index = ROMAJI.index(romaji_letter)
A = u'\u3042'
I = u'\u3044'
U = u'\u3046'
E = u'\u3048'
O = u'\u304A'
KA = u'\u304B'
KI = u'\u304D'
KU = u'\u304F'
KE = u'\u3051'
KO = u'\u3053'
SA = u'\u3055'
SHI = u'\u3057'
SU = u'\u3059'
SE = u'\u305B'
SO = u'\u305D'
TA = u'\u305F'
CHI = u'\u3061'
TSU = u'\u3064'
TE = u'\u3066'
TO = u'\u3068'
NA = u'\u306A'
NI = u'\u306B'
NU = u'\u306C'
NE = u'\u306D'
NO = u'\u306E'
HIRAGANA = [A,I,U,E,O,KA,KI,KU,KE,KO,SA,SHI,SU,SE,SO,TA,CHI,TSU,TE,TO,NA,NI,NU,NE,NO]
print("\nWhich Hiragana character is the Romaji letter " + romaji_letter + " ?\n")
for letter in HIRAGANA:
print(letter.encode("UTF-8")+" "+str(HIRAGANA.index(letter))+"\n")
print("Choose the corresponding number and press [ENTER] : ")
userInput = raw_input()
try:
letter_index = int(userInput)
print("You have chosen letter "+HIRAGANA[letter_index].encode("UTF-8"))
if (letter_index == romaji_index):
print("The answer is correct!")
else:
print("The answer is incorrect!")
except:
print("Enter only the number of the corresponding letters!")
当我在python 2中执行它,它确实工作没有问题。但是,当我尝试使用python 3时,出现以下错误:
"Can't concat bytes to str"
有人可以通过解释为什么会发生这种情况吗?
哦,如果不知道这非常重要,但我使用Windows 7上的Fedora和Python 3蟒蛇2(与Visual Studio 2012一起使用Python的工具)
你不应该编码的字符,UTF -8。离开编码到print()
电话:
for letter in HIRAGANA:
print(letter + u" " + str(HIRAGANA.index(letter)) + u"\n")
和:
print(u"You have chosen letter " + HIRAGANA[letter_index])
,因为在Python 3串都是Unicode值,不是字节的值,但编码总是产生字节。
更妙的是,使用字符串格式化和enumerate()
这里:
for index, letter in enumerate(HIRAGANA):
print(u"{} {}\n".format(letter, index))
和
print(u"You have chosen letter {}".format(HIRAGANA[letter_index]))
接下来,raw_input()
是不是在Python 3中使用,你必须使用input()
那里。您可以使用例外来检测使用哪一个:
try:
raw_input
except NameError:
raw_input = input # Python 3
工作正常!万分感谢! :)ありがとう! – sztyrymytyry 2015-03-19 11:12:26
如果我可能会问,我还有一个问题给你,而这对我来说很奇怪。当我在python 3.4.2 shell中使用你的解决方案时,它的工作完美无瑕,但是当我在Visual Studio中使用它时,出现以下错误:'charmap'编解码器无法在位置0编码字符'\ u3042':字符映射到
@sztyrymytyry:Visual Studio中的控制台被配置为不同的代码页。除非重新配置它,否则它不能处理所有的Unicode输出。 – 2015-03-19 12:10:28
使用字典。 – 2015-03-19 10:56:58