2013-05-27 2 views
1

이것은 불가능할 수도 있지만 (컴퓨터가 무언가를 인쇄 한 후에 변수를 설정하지 않고) 컴퓨터에 마지막으로 인쇄 된 것이 있는지 또는 사용자인지를 알 수 있습니다. 예 :파이썬에서 사용자가 마지막으로 텍스트 나 프로그램을 입력했는지 감지하는 방법이 있습니까?

answer = raw_input("Say something.") 
if "ok" in answer.lower(): 
    print "Yay!" 
if "poo" in answer.lower(): 
    print "That's very childish" 
if (computer hasn't printed anything already): 
    print "I'm not very talkative." 

사용자 입력을 처리하는 지점이 많지만 많은 수의 elif와 else가 작동하지 않습니다. 감사합니다

답변

0

앞서 언급 한 것처럼 일 수 있습니다. 다만 변수를 설정했는데 좋지 않습니다. 나는 많은 파이썬 코딩을하지 않는다, 그래서 충분히 파이썬 있다면 난 아무 생각이 :

answer = raw_input("Say something.") 
output = [] 
if "ok" in answer.lower(): 
    output.append("Yay!") 
if "poo" in answer.lower(): 
    output.append("That's very childish") 
if not output: 
    output.append("I'm not very talkative.") 
for o in output: 
    print o 

면책 조항 :

또는 당신은 당신의 출력을 수집 할 수 있습니다.

+0

이 ... 이건 그냥 오래 걸릴 것

def handler(answer): responded = False def respond(output): nonlocal responded responded = True print(output) if "ok" in answer: respond("Yay!") if not responded: respond("I'm not very talkative") 
입니다 idea –

+0

's/print \ (. * \)/output.append (\ 1) /';-)을 조금이라도 수정하고 (정규 표현식을 지원하는 편집기로) 수정할 수는 없습니다. –

+0

그래도 나중에)와 그 자리에 많은 지문이 있습니다. –

0

은 또한 변수의 인쇄 설정을 처리하는 내부 함수를 정의

def handler(answer): 
    handler.responded = False 
    def respond(output): 
    handler.responded = True 
    print output 
    if "ok" in answer: 
    respond("Yay!") 
    if not handler.responded: 
    respond("I'm not very talkative") 

이것은 in this question 바와 같이 "비 로컬"-replacement를 이용한다. 파이썬 3을 사용할 수 있다면

것은,이 코드는 nonlocal를 사용하여 좀 더 멋진 수 :

는하지만 흥미로운 이미 모든 인쇄 문을 한
+0

이것은 모든 코드를 함수에 쓰고 모든 지문을 응답으로 대체하는 것을 포함합니다. 또 다른 좋은 생각이지만, 실제로 파이썬에 저장되어있는 가치가 있는지를 찾고 있습니다. –

관련 문제