2011-05-01 129 views
6

我试图解决Python中的https://www.spoj.pl的Krypto问题,它涉及控制台输入。Python命令行 - 多行输入

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

问题是,我无法以任何方式修改输入字符串,它没有任何符号表示结束,我不知道有多少行。

那么我该怎么做?

回答

6

当输入到达流的末尾时,raw_input将返回一个空字符串。所以,如果你真的需要积累整个输入(你或许应该避免给SPOJ约束),然后执行:

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

    buffer += line 

# process input 
+1

我试过了,但不幸的是,这似乎并不奏效。如果在粘贴文本后按Enter键,程序仍会等待更多输入 - >我需要在新的空行中按Enter键。 SPOJ似乎有类似的行为。 – Dreiven 2011-05-01 19:10:01

+0

@Diveiven:删除空格('raw_input()。strip()')。 – 2011-05-01 19:11:24

+0

我尝试过,但似乎没有办法。 – Dreiven 2011-05-01 19:19:08

1

由于Windows上的结束行被标记为“\ r \ n”或“\ n”在Unix系统它是直线前进使用

your_input.replace以代替那些串('\ r \ n','')

+0

我不能像这样替换它,因为raw_input()是针对每行单独调用的。 – Dreiven 2011-05-01 19:18:36

+0

然后,你必须收集你的数据到一个缓冲区或列表....这是直截了当.. – 2011-05-01 19:19:33

+0

我必须多次调用raw_input()多次,每一行我的输入 - >我不知道如何有很多线路 - >我尝试PiotrLegnicas解决方案 - >循环不会终止。在收集完所有输入之后,删除中断实际上不是问题。 – Dreiven 2011-05-01 19:25:41

1

由于raw_input()设计用于读取一行,你可能会遇到麻烦这样。 一个简单的解决方案是将输入字符串放在一个文本文件中并从那里解析。

假设你有input.txt中你可以把值

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

这里使用最好的答案,你仍然有应处理的EOF错误。所以,我只是在这里添加了异常处理

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

    buffer += line