无法理解为什么字母u前缀我的raw_input()输出

Cod*_*Man 2 python unicode raw-input

我目前正在学习Python,并编写了一个程序来试验这门语言.但是,每当我使用它时,输出总是在其中有一个字母"u".我正在使用Pyscripter作为我的IDE.

这是我的代码:

print "whats your name"
age = raw_input()
print "Alright, so %r, I just realized what percent-r does actually or is meant for" % (age)
print "What next ur age",
age1 = raw_input()
print "you entered %r " % (age1)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我看到这样的事情:

>>> Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32.

>>> whats your name (i typed kk)

>>> Alright, so u'kk', i just realized what percent-r does actually or is meant for

>>> what next ur age (i typed ll)

>>> you entered u'll' 
Run Code Online (Sandbox Code Playgroud)

为什么u输出中有一个随机字符,而不仅仅是我想要的字符串?

Mic*_*x2a 6

问题在于你的字符串插值.

在您的代码中,您使用以下内容:

print "Your name is %r" % name
Run Code Online (Sandbox Code Playgroud)

相反,您要么使用:

print "Your name is %s" % name
Run Code Online (Sandbox Code Playgroud)

...这使Python手动处理name为字符串,或使用:

print "Your name is {0}".format(name)
Run Code Online (Sandbox Code Playgroud)

...这是更新,更首选的方式,使用起来不那么挑剔.


这是对正在发生的事情的细分.使用时raw_input(),Python会返回一种称为unicode字符串的特殊字符串.Unicode字符串的特殊之处在于它们可以表示普通字符串不能包含的各种字符,例如中文字符.普通字符串通常只能使用键盘上显示的字符.

现在,在Python 2.x中,您可以通过执行以下操作来指示字符串是unicode:

my_str = u"??/??"
Run Code Online (Sandbox Code Playgroud)

请注意,该字符串以"u"为前缀.

当您使用%r插值指示器时,您告诉Python使用您的字符串,repr在变量上使用,并将其替换为原始字符串.如果你这样做repr(my_str),它会回来u"??/??".

相反,如果你使用%s,那么Python将使用str变量.如果你这样做str(my_str),它将返回"??/??"(排序).

Unicode可能是一个很难理解的东西,特别是在Python中.如果您有兴趣,这个演示文稿将更深入地了解unicode究竟是什么,以及它在Python中的使用方式.