2013-09-28 46 views
1

目前,我正在学习Python中的输出,并写了一个程序来试验语言。但是,每当我使用它时,输出总是在某个地方有一个字母“u”。我使用Pyscripter作为我的IDE。不明白为什么字母U前缀我的raw_input的()

这是我的代码:

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字符,我想要?

回答

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。如果你有兴趣,这个presentation将更深入地了解unicode是什么,以及它如何在Python中使用。

+0

嘿哇这是一个最快的答案回应我的人生查询 非常感谢,所以问题是%r一般会返回一个unicode前缀或一个“u”前缀我的输出sis我知道它正确 也打印 “你的名字是{0}” 格式(名称)会照顾大多数/所有其他%格式(如: - %S,%d,%R)。我输入正确的 –

+0

@ user2825656 - 我编辑我的答案与一些更多的信息。如果你使用'%r',Python将尽可能地从字面上替换字符串。如果你使用'%s',那么Python会尝试使用更友好的格式。 (在很多情况下,两者的功能是一致的,但事实并非如此)。 – Michael0x2a

+0

我是否正确地打印“您的名字是{0}”。格式(名称)会处理大部分/所有其他%格式(例如: - %s,%d,%r) 嘿,真的thanx很多为我们的帮助,我接近我的澄清非常快,只是几个,我通过 –

相关问题