2011-10-15 6 views
19

있지만, 하나 하나 할 수없는,이 나타나는, 할당 조건은 C에서 루프

while((i=a) != b) { } 

하지만 파이썬에서

을 할 수 있습니다.

while (i = sys.stdin.read(1)) != "\n": 

는 해결 방법이이

while (i = sys.stdin.read(1)) != "\n": 
     ^
SyntaxError: invalid syntax 

합니다 (^=에 있어야한다)를 생성한다?

+3

'sys.stdin.readline()' –

+0

오 그 어색한 .. 'readline()'과'raw_input()'은 어떻게 다른가요? – tekknolagi

+1

@tekknolagi 그는 아마도 귀하의 의견을받지 못했습니다. 코멘트 텍스트에'@name'을 추가하여 사람에게 ping을하는 것이 좋습니다. – ovgolovin

답변

17

사용 휴식 :

while True: 
    i = sys.stdin.read(1) 
    if i == "\n": 
     break 
    # etc... 
+0

감사합니다!작품 :) – tekknolagi

+18

무한 루프 동안 휴식? 정말? 그것은 화상 ... –

+2

@FalconMomot 이것은 나에게 완벽하게 합리적인 패턴처럼 보입니다. 루프가 끊어진 부분은 무엇이 중요합니까? 종료 조건이 발생하거나 종료되지 않습니다. 'i == "\ n"'이 루프 내부에서 발생하지 않으면 (휴식을 일으킴) while 루프의 조건 인수에서도 발생하지 않습니다. – vastlysuperiorman

3

는 개인적으로 내가 IMM의 및 break를 사용하여 마크의 답변을 좋아하지만 당신은 또한 할 수있는 :

a = None 
def set_a(x): 
    global a 
    a = x 
    return a 

while set_a(sys.stdin.read(1)) != '\n': 
    print('yo') 

나는 그것을 권하고 싶지 않다지만.

7

당신은 2 개의 인수를 호출 방법을 사용하여 내장 함수 iter()를 사용하여이 작업을 수행 할 수 있습니다 이것에 대한

import functools 
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'): 
    ... 

문서 :

iter(o[, sentinel])
...
경우]를 두 번째 인수 인 의 센티미터이 주어지면 o은 호출 가능한 ob이어야합니다. ject. 이 경우 작성된 ​​반복자는 next() 메소드를 호출 할 때마다 인수가없는 을 호출합니다. 반환 된 값이 인 센티미터과 같으면 StopIteration이 발생하고, 그렇지 않으면 값이 반환됩니다.

의 두 번째 형식의 유용한 응용 프로그램 중 하나는 특정 줄에 도달 할 때까지 파일의 줄을 읽는 것입니다. readline() 방법은 빈 문자열을 반환 할 때까지 다음의 예는 파일을 읽

with open('mydata.txt') as fp: 
    for line in iter(fp.readline, ''): 
     process_line(line) 
4

버전 functools없이 :

for i in iter(lambda: sys.stdin.read(1), '\n'):