2011-05-01 7 views
6

콘솔 입력과 관련된 Python의 https://www.spoj.pl에있는 Krypto 문제를 해결하려고합니다.Python 명령 행 - 다중 행 입력

내 문제는 입력 문자열에 여러 줄이 있지만 하나의 단일 문자열로 필요하다는 것입니다. 콘솔에서 텍스트를 raw_input() 및 붙여 넣기 (테스트 용)하면 파이썬은 모든 라인 이후에 엔터를 누른 것처럼 위협합니다 -> 루프에서 raw_input()을 여러 번 호출해야합니다.

문제는 입력 문자열을 어떤 식 으로든 수정할 수 없다는 것입니다. 기호 끝에는 끝이 표시되어 있고 몇 줄이 있는지 모릅니다.

그럼 어떻게해야합니까? 윈도우에서 행의 끝 이후

답변

6

입력시 스트림의 끝 부분에 도달하면 raw_input은 빈 문자열을 반환합니다. 당신이 정말로 (당신은 아마 SPOJ 제약을 주어 피하는한다) 전체 입력을 축적해야하는 경우 그래서, 다음을 수행하십시오 raw_input() 이후

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

    buffer += line 

# process input 
+1

나는 이것을 시도했지만 불행히도 이것은 효과가없는 것 같다. 텍스트를 붙여 넣은 후 Enter 키를 누르면 프로그램은 계속 더 많은 입력을 기다립니다. -> 새 빈 줄에서 Enter 키를 눌러야합니다. SPOJ도 비슷한 행동을하는 것 같습니다. – Dreiven

+0

@Dreiven : 공백을 제거하십시오 ('raw_input(). strip()'). –

+0

나는 그것을 시도했다. 그러나 그것은 트릭을하는 것처럼 보이지 않았다. – Dreiven

1

은 '\는 r \ n "하거나 ("\ 연구가

your_input.replace를 사용하는 문자열을 대체 정직 UNIX 시스템'\ 않음 '으로 표시된 \ n ',' ')

+0

예외 처리를 추가했다. – Dreiven

+0

다음 버퍼 또는 목록에 데이터를 수집해야합니다 .... 이것은 곧장 앞으로 .. –

+0

입력 한 각 줄마다 한 번 raw_input()을 여러 번 호출해야합니다. 많은 라인이 있습니다 -> PiotrLegnicas 솔루션을 시도하십시오 -> 루프가 종료되지 않습니다. 내가 모든 입력을 모은 후에 휴식을 제거하는 것은 정말로 문제가되지 않습니다. – Dreiven

1

한 줄을 읽을 수 있도록 설계되었습니다, 당신은 문제가이 방법이있을 수 있습니다. 간단한 해결책은 입력 문자열을 텍스트 파일에 저장하고 거기에서 파싱하는 것입니다.

당신이 여기에 가장 좋은 대답을 사용

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

으로 값을 사용할 수 있습니다 input.txt를 가지고 가정, 당신은 여전히 ​​처리해야 EOF를 오류가있을 것이다. 그래서, 난 그냥 raw_input을()가 별도로 모든 라인에 대한 호출되기 때문에이 같은 그것을 대체 할 수 없습니다 여기

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

    buffer += line