I'm currently learning Python, and wrote a program to experiment with the language. However, whenever I use it, the output always has a letter "u" in it somewhere. I'm using Pyscripter as my IDE.

This is my code:

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)

When I run it, I see something like this:

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

Why is there a random u character inside my output, instead of just the string I want?

有帮助吗?

解决方案

The issue is with your string interpolation.

In your code, you use something like:

print "Your name is %r" % name

Instead, you either want to use:

print "Your name is %s" % name

...which makes Python manually treat name as a string, or use:

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

...which is the newer, more preferred way, and is less finicky to use.


Here's a breakdown of what's happening. When you use raw_input(), Python is returning a special kind of string called a unicode string. Unicode strings are special in that they can represent all kinds of characters that a normal string can't, such as Chinese characters. Normal strings can generally use only the characters you see on your keyboard.

Now, in Python 2.x, you can indicate that a string is unicode by doing something like:

my_str = u"汉字/漢字"

Notice that the string is prefixed with a "u".

When you use the %r interpolation indicator, you are telling Python to take your string, use repr on the variable, and substitute it into the original string. If you do repr(my_str), it'll return u"汉字/漢字".

In contrast, if you use %s, then Python will use str on the variable. If you do str(my_str), it will return "汉字/漢字" (sort of).

Unicode can be a tricky thing to understand, especially in Python. If you're interested, this presentation will go far more into depth on exactly what unicode is, and how it's used in Python.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top