2013-09-28 2 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, вы можете указать, что строка Юникода делать что-то вроде:

my_str = u"汉字/漢字" 

Обратите внимание, что строка с приставкой «и».

Когда вы используете индикатор интерполяции %r, вы говорите Python, чтобы взять вашу строку, используйте переменную repr и замените ее на исходную строку. Если вы сделаете repr(my_str), он вернется u"汉字/漢字".

Наоборот, если вы используете %s, тогда Python будет использовать str для переменной. Если вы делаете str(my_str), он вернет "汉字/漢字" (сорт).

Unicode может быть сложно понять, особенно в Python. Если вам интересно, это presentation будет намного глубже в точности, что такое unicode и как он используется в Python.

+0

hey wow, который был самым быстрым ответом ответа на мой запрос в жизни спасибо большое, поэтому проблема заключается в том, что% r в общем случае вернет префикс в unicode или «u», префиксный мой вывод sis, я получу его правильно также print «Ваше имя {0}». format (name) позаботится о большинстве/всех других форматах% (например: -% s,% d,% r) для моего права ввода –

+0

@ user2825656 - я отредактировал свой ответ с некоторой дополнительной информацией.Если вы используете '% r', Python заменит то, что строка выглядит как можно более буквально. Если вы используете '% s', тогда Python пытается использовать более дружественный формат. (Во многих случаях два будут функционировать одинаково. Так получилось, что это не так). – Michael0x2a

+0

Я получил правильную печать «Ваше имя {0}». Format (name) позаботится о большинстве/всех других форматах% (например: -% s,% d,% r) для моего права ввода эй действительно спасибо за помощь ур, я очень быстро приближаюсь к моим разъяснениям еще пару раз, и я через –

Смежные вопросы