假设您编写以下程序
a=input("Input: ")
print(a)
并尝试输入换行符\n
:
Input: a\nb
a\nb
输入未被视为\n
字符,而是被视为两个单独的字符\\
和n
。如何获得带有转义序列的输入,将其视为转义序列?以上示例的结果应为
Input: a\nb
a
b
答案 0 :(得分:3)
input
语句接受用户原样输入的输入。 \
逸出约定是Python字符串文字中发生的事情:它不是适用于存储在变量中的数据的通用约定。如果是这样,则永远不能在字符串变量中存储两个字符\
后跟n
,因为它们会被解释为ASCII 13。
您可以用这种方式做您想做的事情:
import ast
import shlex
a=input("Input: ")
print(ast.literal_eval(shlex.quote(a)))
如果响应Input:
提示,您键入one\ntwo
,则将打印此代码
one
two
这是通过将a
的内容one\ntwo
改成带引号的字符串,看起来像"one\ntwo"
,然后将其视为字符串文字来进行评估的。这使\
转义约定重新生效。
但这是非常的回旋处。您确定要让程序用户输入控制字符吗?
答案 1 :(得分:2)
您可以将\\n
替换为\n
,以获得所需的结果:
a = a.replace('\\n', '\n')
input
不会读取\
作为转义字符。
如果您只想打印输入内容,可以使用类似这样的东西,它将处理其他转义字符。在我看来,这不是理想的解决方案,并且会遭受'
的破坏。
eval('print("{}")'.format(a))
答案 2 :(得分:1)
您好,您无法输入\n
,因为这会导致输入关闭。您可以尝试以下方法:
replace
对字符串进行后处理input().replace("\\n", \n)
while
进行输入,直到出现空白行为止inputs = []
while not inputs or current:
current = input()
inputs.append(current)
"\n".join(inputs)