수동 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 루프를 고려뿐만 아니라 재귀 루프 문제는이 개 종료 조건이 함께 존재할 수 없습니다 고려하십시오.