2014-10-19 5 views
-1

저는 파이썬에서 더 나은 그립을 얻기 위해 간단한 아이디어를 얻고 자합니다. 나는 문제가있다. 내가 일이 얻으려고하는 것은 그들이가 표시되어 사용자가 메인 메뉴에없는 그 때마다 (즉, 지침, 크레딧 등) 그래서파이썬에서 다른 함수의 매개 변수로 함수를 사용하기 3.4.2

def backToMain(f): 
    print('Back to Main Menu (B)') 
    back = input('>>>') 
    back = back.lower() 
    if back == 'b': 
     mainMenu() 
    else: 
     print('\nThat is not a valid input.\n\n') 
     f 

def instruct(): 
    instructtxt= str('INSTRUCTIONS') 
    instructlen = len(instructtxt) * 6 
    print(instructtxt.center(instructlen,'~')) 
    backToMain(instruct()) 

입니다 : 여기

내 코드입니다 하단의 텍스트, "메인 메뉴로 돌아 가기"그리고 'b'키를 누르면 mainMenu() 함수로 되돌아갑니다. 그렇지 않다면 유효한 입력이 아니며 현재 들어있는 함수의 처음으로 되돌아갑니다.

backToMain() 함수를 복수로 사용하려는 경우 문제가 발생했습니다. 기타 함수는, 사용자가 프롬프트에 'b'를 입력하면 종료하려고하는 기능의 시작 부분으로 이동합니다. 하지만 현재는 instruct()의 print 문을 입력하면 무한대로 반복됩니다.

누구나 나를 도울 수 있다고 생각하십니까? 명확하지 않은 경우 알려 주시면 명확히하려고 노력하겠습니다.

감사합니다.

+0

코드에서 들여 쓰기를 수정하십시오. – BrenBarn

+0

@ BrenBarn 주셔서 감사합니다. 코드가 실제 스크립트에서 적절하게 들여 쓰기되었지만 들여 쓰기가 문제가되지는 않았습니다. – ryanhagz

답변

0

잘못된 위치에 괄호를 사용하고 있습니다. instruct()을 작성할 때 instruct()으로 전화하십시오. 함수를 호출하면 인수가 호출되기 전에 인수가 평가됩니다. 당신이 backToMain(instruct())을 할 때, 그 함수 자체를 전달하는 등 다시 호출 다시 instruct를 호출 의미 인수,

으로 반환 값을 전달하기 위해 instruct()를 호출 할 수있다 (하지 반환 값), do backToMain(instruct).

backToMain에는 정반대의 문제가 있습니다. 결국 f()해야합니다. f 그 자체는 호출이 아닌 함수에 대한 참조 일 뿐이므로 아무 것도하지 않습니다. 함수를 호출하려면 괄호를 사용해야합니다. 함수 객체를 전달하려면 괄호를 사용하지 않아야합니다.

그렇다고해서 이렇게하는 것이 좋지 않습니다. 많은 재귀 호출을 생성합니다. 사용자가 잘못된 입력을 많이 입력하면 재귀 한계에 도달 할 수 있습니다. 프로그램의 전반적인 구조에 대해 더 많이 알지 못하면 얼마나 잘 할지를 말하기는 어렵지만 일반적으로 "다시 시작"하기위한 기법으로 재귀를 피하는 것이 좋습니다. 당신은 루프를 선호해야합니다.

+0

감사합니다. 이것이 정확하게 문제였습니다. 이제는 무지를 용서하십시오.하지만이 기술로 재귀 호출을 만드는 방법은 무엇입니까? 게다가 while 루프에서 현재 코드를 고수하는 것만 큼 간단하게이 문제를 해결할 수 있을까요? – ryanhagz

+0

@ryanhagz :'instruct'를 호출한다고 가정 해보십시오. 그런 다음'backToMain'을 호출합니다. 사용자가 무효 입력을 입력하면'instruct'가 다시 호출됩니다. 이것은 재귀 호출 (간접 임에도 불구하고)입니다. 또한 사용자가'mainMenu'에서 몇 가지 선택을하고 어떻게 든'backToMain'과 b에 도달하면'mainMenu'가 (재귀 적으로) 다시 호출됩니다. 기본적으로 사용자가 무언가를 할 때마다 이미 호출 된 함수 호출로 돌아가는 대신 연결된 함수를 다시 호출합니다. – BrenBarn