Python 无法理解为什么字母u作为原始输入()输出的前缀

Python 无法理解为什么字母u作为原始输入()输出的前缀,python,unicode,raw-input,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", age

我目前正在学习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)
当我运行它时,我看到如下内容:

>>> 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' 

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

问题在于字符串插值

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

print "Your name is %r" % name
my_str = u"汉字/漢字"
相反,您可以使用:

print "Your name is %s" % name
…这使Python手动将
name
作为字符串处理,或使用:

print "Your name is {0}".format(name)
…这是一种更新、更受欢迎的方式,使用起来也不那么挑剔


这是正在发生的事情的细目。使用
raw\u input()
时,Python返回一种特殊类型的字符串,称为unicode字符串。Unicode字符串的特殊之处在于,它们可以表示普通字符串无法表示的所有类型的字符,例如汉字。普通字符串通常只能使用键盘上显示的字符

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

print "Your name is %r" % name
my_str = u"汉字/漢字"
请注意,字符串的前缀是“u”

当您使用
%r
插值指示符时,您告诉Python获取字符串,对变量使用
repr
,并将其替换为原始字符串。如果您执行
repr(my_str)
,它将返回
u“汉字/漢字"

相反,如果使用
%s
,Python将对变量使用
str
。如果使用
str(my_str)
,它将返回
”汉字/漢字“
(某种程度上)


Unicode可能是一个很难理解的东西,尤其是在Python中。如果您感兴趣,这将更深入地了解Unicode到底是什么,以及它在Python中的使用方式。

嘿,哇,这是我一生中对查询的最快回答,非常感谢,所以问题是%r通常会返回Unicode前缀或“u”“在我的输出前加前缀是我做对了,还可以打印”您的名字是{0}“。格式(名称)将为我的输入处理大多数/所有其他%格式(例如:-%s,%d,%r)right@user2825656--我用更多的信息编辑了我的答案。如果使用
%r
,Python将尽可能用字面上的字符串替换字符串。如果使用
%s
,则Python会尝试使用更友好的格式。(在许多情况下,这两种格式的功能是相同的。这里正好不是这样)。我打印“你的名字是{0}”是否正确。格式(名称)将处理我输入的大多数/所有其他%格式(例如:-%s,%d,%r)嘿,非常感谢你的帮助,我正在很快地接近我的澄清,只是再多一点,我是through@user2825656”“是的。更新的样式(在Python2.6和更高版本中添加)超过了旧版本。好的,非常感谢你,伙计,我正准备尝试它(“你的名字是{0}”。format(name)),几分钟后会有反馈,谢谢(附言:unicode我只是总体上看了一下unicode的介绍其实并没有那么难理解,只是需要更多的时间阅读和一点耐心,这两者我都不擅长lolz)