파일 작업은 재귀의 사용을 종료 할 수 없습니다.

  수동 FTP를 작성할 때, 당신은 파일, 파일 리턴 경로를 선택하는 함수를 작성해야합니다.

  이것은 다른 일회용 재귀 함수 값이다.

가져 오기 OS 

DEF의 choose_file () :
     그동안 : 참 
        CURRENT_PATH = os.getcwd () 
        path_list = os.listdir (CURRENT_PATH)
         에 대한 인덱스 이름  열거 (path_list ,. 1 ) :
             인쇄 (인덱스, 이름) 
        선택 = INPUT ( ' 입력 당신의 선택은, 0을 눌러 이전 >>>으로 돌아갑니다 : ' ) .strip ()
         IF 선택 == ' 0 ' : 
            os.chdir (os.pardir) 
            choose_file () 
            #의 수익을 
        IF  하지choice.isdigit () :
             인쇄 ( ' 번호를 입력합니다 ' )
             계속을 
        선택 . = INT를 (선택) - 1
         IF 선택 하지  범위 (0, LEN (path_list)) :
             인쇄 ( ' 올바른 번호를 입력 해주세요 ' )
             계속 
        여기서 path_name을 = path_list는 [초이스] 
        경로 = os.path.join (CURRENT_PATH, 여기서 path_name)
         IF : os.path.isdir (여기서 path_name) 
            os.chdir (여기서 path_name) 
            choose_file ()를 
        다른 :
            인쇄 (경로)
             반환 경로 path_name에의 

choose_file ()

  문제는 내가 폴더가 아닌 파일로 실행하면, 경로 값으로 돌아가지만, 디렉토리를 선택 끝나지 않는다, 내가 선택할 수 있도록 계속한다는 것입니다.

  그래서 나는 다시 선택하고 나를 선택할 수 있습니다. . . (어떤 문제)

  나중에 조금 위로 전환 단지 발견 디렉토리 나 한 번 선택할 수 있습니다.

  내가 재귀 루프에 재귀에 입력 할 때 재귀 문제가없는 이상 동안, 한 최종 조건이 반환, 그것은 반환 값을 많이 반환하기 때문에이 경우에 있어야합니다.

  해결 방법 :

  1 번 재귀를했다.

  조건이 False 값에 도달 할 때 2. 그렇지 않으면 값은 True입니다, 전역 변수를 설정합니다. 함수의 종말의 시작에서 조건 명령문을 작성합니다.

  3.만큼는 GET 값은 그 값을 반환 같이, 함수 값이 하나의 중계 기능의 최 외층을 반환한다.

  첫 번째는 정말, 당분간 생각을 포기하는 어떤 방법을 모른다.

  두 번째 방법 후 같은 관행이. OK 없음, while 루프 내부 데이터 만 단부 동안 창 함수를 통해 전송되지 때문이다.

가져 오기 OS의 


isgo = 진정한 

DEF의 choose_file () :
     글로벌 isgo
     IF isgo == 거짓 :
         반환 
    그동안 참 : 
        CURRENT_PATH을 = os.getcwd () 
        path_list = os.listdir (CURRENT_PATH)
         에 대한 인덱스 이름  열거 (path_list ,. 1 ) :
             인쇄 (인덱스, 이름) 
        선택 = 입력 ( ' 선택 사항을 입력하십시오, 0을 눌러 이전 >>>으로 돌아갑니다 : ' ) .strip ()
         IF 선택 == ' 0 ': 
            os.chdir (os.pardir) 
            choose_file ()가 
            반환 
        IF  되지 않음 (choice.isdigit) :
             인쇄 ( ' 번호를 입력합니다 ' )
             계속을 
        선택 . = INT를 (선택을) - 1
         IF 선택 하지  범위 (0, LEN (path_list) ) :
             인쇄 ( ' 올바른 번호를 입력 해주세요 ' )
             계속 
        여기서 path_name = path_list [선택] 
        경로 = os.path.join (CURRENT_PATH, 여기서 path_name)
         IF를 os.path.isdir (경로) :
            os.chdir (경로) 
            choose_file () 
            반환 
        다른 :
             #의 인쇄 (경로) 
            isgo = False를 
            반환 경로 path_name에의 


인쇄 (choose_file ())
 #의 choose_file ()

 

 

  세 번째 방법 :

가져 오기 OS 


DEF의 choose_file () :
     그동안 : 참 
        CURRENT_PATH = os.getcwd () 
        path_list = os.listdir (CURRENT_PATH)
         에 대한 인덱스 이름  열거 (path_list ,. 1 ) :
             인쇄 (인덱스, 이름) 
        선택 = INPUT ( ' 입력 : 당신의 선택은, 0을 눌러 이전 >>>으로 돌아갑니다 ' ) .strip ()
         IF == 선택을 ' 0 ' : 
            os.chdir (os.pardir) 
            반환 choose_file ()
         IF  하지choice.isdigit () :
             인쇄 ( ' 번호를 입력합니다 ' )
             계속을 
        선택 . = INT를 (선택) - 1
         IF 선택 하지  범위 (0, LEN (path_list)) :
             인쇄 ( ' 올바른 번호를 입력 해주세요 ' )
             계속 
        여기서 path_name을 = path_list는 [초이스] 
        경로 = os.path.join (CURRENT_PATH, 여기서 path_name)
         IF : os.path.isdir (경로) 
            os.chdir (경로) 
            복귀 choose_file ()를
         다른 :
            #의 인쇄 (경로) 
            #의 isgo = False를 
            반환 경로 path_name에의 

인쇄 (choose_file ())

  이 방법은 함수를 한 번만 호출 할 때마다 괄호 때, 그렇지 않으면 당신은 반복적으로 프로그램을 실행합니다.

  그래서 결론 없습니다 :
  1. 마 아무것도 무한 루프를 작성, 조건을 결정하는 두 번째 방법을 추가 그동안 달성해야한다.

  그동안 증가하지 않는다 2. 재귀. 그러나 또한 while 루프를 고려뿐만 아니라 재귀 루프 문제는이 개 종료 조건이 함께 존재할 수 없습니다 고려하십시오.

 

추천

출처www.cnblogs.com/LZXlzmmddtm/p/11360766.html