2

我目前正在学习 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字符,而不仅仅是我想要的字符串?

4

1 回答 1

6

问题在于您的字符串插值。

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

print "Your name is %r" % name

相反,您要么想使用:

print "Your name is %s" % name

...这使得 Python 手动将name其视为字符串,或使用:

print "Your name is {0}".format(name)

...这是更新、更受欢迎的方式,使用起来也不那么挑剔。


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

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

my_str = u"汉字/漢字"

请注意,字符串以“u”为前缀。

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

相反,如果你使用%s,那么 Python 将str在变量上使用。如果你这样做str(my_str),它会返回"汉字/漢字"(有点)。

Unicode 可能很难理解,尤其是在 Python 中。如果您有兴趣,本演示文稿将更深入地了解 unicode 到底是什么,以及它在 Python 中的使用方式。

于 2013-09-28T07:14:47.383 回答