Python命令行-多行输入

Python命令行-多行输入,python,command-line,user-input,multiline,Python,Command Line,User Input,Multiline,我正试图解决Python中的一个Krypto问题,它涉及控制台输入 我的问题是,输入字符串有多行,但在程序中需要作为一个字符串。 如果我只是在控制台中使用raw_input()并粘贴(用于测试)文本,Python就会威胁到它,就像我在每行之后按enter键->我需要在循环中多次调用raw_input() 问题是,我不能以任何方式修改输入字符串,它没有任何标志结束的符号,我不知道有多少行 那我该怎么办呢?既然Windows上的行尾在Unix系统上标记为“\r\n”或“\n”,使用 您的\u inp

我正试图解决Python中的一个Krypto问题,它涉及控制台输入

我的问题是,输入字符串有多行,但在程序中需要作为一个字符串。 如果我只是在控制台中使用raw_input()并粘贴(用于测试)文本,Python就会威胁到它,就像我在每行之后按enter键->我需要在循环中多次调用raw_input()

问题是,我不能以任何方式修改输入字符串,它没有任何标志结束的符号,我不知道有多少行


那我该怎么办呢?

既然Windows上的行尾在Unix系统上标记为“\r\n”或“\n”,使用


您的\u input.replace('\r\n','')

当输入到达流的末尾时,原始\u input将返回一个空字符串。因此,如果您确实需要累积整个输入(您可能应该避免给定的SPOJ约束),那么请执行以下操作:

buffer = ''
while True:
    line = raw_input()
    if not line: break

    buffer += line

# process input
由于
raw\u input()
设计为读取一行,因此这种方式可能会有问题。 一个简单的解决方案是将输入字符串放入一个文本文件中并从中进行解析

假设您有input.txt,您可以将值作为

f = open(r'input.txt','rU')
for line in f:
  print line,

使用这里的最佳答案,您仍然会有一个应该处理的EOF错误。所以,我只是在这里添加了异常处理

buffer = ''
while True:
    try:
         line = raw_input()
    except EOFError:
         break
    if not line: 
         break

    buffer += line

我试过了,但不幸的是,这似乎不起作用。如果在粘贴文本后按Enter键,程序仍将等待更多输入->我需要在新的空行中按Enter键。SPOJ似乎也有类似的行为。@Dreiven:去掉空白(
raw_input().Strip()
)。@Dreiven:您可以尝试
sys.stdin.read()
,但这段代码和上面的代码可能都会耗尽可用内存。我不能这样替换它,因为raw_input()分别为每一行调用。然后您必须将数据收集到缓冲区或列表中…这是直截了当的..我必须多次调用raw_input(),每行输入一次->我不知道有多少行->我尝试PiotrLegnicas解决方案->循环不会终止。在我收集了所有的输入之后,删除中断真的没有问题。