2012-05-20 5 views
-2

if 문 내부에서 if 문을 실행할 수 있는지 궁금합니다. 첫 번째 'if'문에 대해 5 가지 입력을 1,2,3,4,5로하고 싶습니다.if 문을 파이썬의 기존 if 문 내에서 실행할 수 있습니까?

choice = int(raw_input("Choose your option: ").strip()) 
if choice == 1: 
(........ code within this if statement) 

그런 다음 y/n으로 입력이 예 또는 아니오 인 다른 if 문을 실행하고 싶습니다.

세그먼트 완료시 프로그램을 처음으로 되돌리려 고하기 때문에 while 문을 모두 실행합니다.

loop = 1 
choice = 0 

while loop == 1: 
    # Print what options you have 
    print "Welcome" 
    print "Your options are:" 
    print # 
    print "1) 
    print # 
    print "2) 
    print # 
    print "3) 
    print # 
    print "4) 
    print # 
    print "5) Close Window" 
    print # 

    choice = int(raw_input("Choose your option: ").strip()) 
    if choice == 1: 
     h = input("stuff: 1-5") 
     p = input("more_stuff: 1-4 ") 
     z = formula for answer 
     print "stuff", "+", "more_stuff", "=", z #the answer 
     print # 
    elif choice == 2: 
     #then I have my other code and would like to run a 
     #second if statement inside choice 2 
     #being contingent on the user input of y or n 

대신 다른의 참/거짓 문을 실행하는 데 더 좋을 것이다 (다른 내에서 하나를 실행하는 것이 실제로 가능하다는 것을 가정) if 문?

저는 인터넷에서 처음부터 검색 한 적이 있지만 결과를 산출하는 데 필요한 적절한 키워드를 알지 못합니다.

정말로 조언과 도움에 감사드립니다. 고맙습니다!

더 좋은 방법이 있다면, 제 작품을 지금까지 비판 해보십시오. 중요한 공백의

+11

시도했을 때 어떤 일이 발생 했습니까? –

+2

나는 당신의 질문이 "중첩 된 if-statements"에 관한 것이라고 생각한다. 당신은 그 용어들로 google을 검색하려고 시도 할 수있다. 즉, 파이썬과 대부분의 (모든?) 다른 언어에서 중첩 된 if 문을 사용할 수 있습니다. – Levon

답변

1

장점 중 하나는 당신이 단지 그것을 시도하고 보이지 않는 이유가 궁금 않는 dangling else 문제

>>> def f(choice, other_choice): 
... if choice == 1: 
... print "one" 
... if other_choice == "y": 
... print "yes" 
... elif choice == 2: 
... print "two" 
... if other_choice == "n": 
... print "no" 
... 

고통받지 것입니다.

+0

+1 "try it and see", 항상 파이썬으로 가장 쉬운 방법 –

0

예, 가능하며 일반적입니다. 그냥 가서해라.

파이썬이므로 새 조건을 시작할 때마다 여분의 들여 쓰기를 추가해야합니다 (항상 좋은 생각이지만 실제로는 필요합니다). 예를 들어 : 즉각적인 대답은하지만

if choice == 1: 
    print "one" 
    if choice2 == 1: 
     print "choice 2 is also one" 
    elif choice2 == 2: 
     print "choice 2 is two." 
elif choice == 2: 
    print "two" 
... 
1

"예, 당신은 둥지 다른 경우 문 안쪽 문 수 있다면", 그것은 항상 좋은 연습이 아니다, 그것은 코드가 & 큰 난치성 할 수있다. 파이썬으로, 당신이 원하는과 같은 기능의 덩어리 사이에 분기에 권장되는 방법은 함수의 사전을 사용하는 것입니다

  • int_input

    단지 편의 :

    def int_input(prompt): 
        return int(raw_input(prompt)) 
    
    def add_two_numbers(settings): 
        "Add two numbers together" 
        h = int_input("stuff [1-5]: ") 
        p = int_input("more_stuff [1-4]: ") 
        z = h + p 
        print '%d + %d = %d' % (h, p, z) 
    
    def do_something_else(settings): 
        "Do something else" 
        <etc> 
    
    def exit_menu(settings): 
        "Exit menu" 
        settings['loop'] = False 
    
    MENU_OPTIONS = { 
        1: add_two_numbers, 
        2: do_something_else, 
        <etc>, 
        9: exit_menu 
    } 
    
    def main(): 
        settings = dict(
         loop = True 
        ) 
    
        # display help 
        print "Welcome" 
        print "Your options are:" 
        print 
        for option in sorted(MENU_OPTIONS): 
         print "%s) %s" % (option, MENU_OPTIONS[option].__doc__) 
    
        # user input 
        while settings['loop']: 
         choice = int_input("Choose your option: ") 
         if choice in MENU_OPTIONS: 
          func = MENU_OPTIONS[choice] 
          func(settings) 
         else: 
          print "Not a valid option, try again." 
    

    몇 가지 의견은 이해하는 데 도움 동일한 raw_input을 반복적으로 저장하는 기능입니다.

  • MENU_OPTIONS는 우리의 파견 사전입니다. 키는 유효한 입력 옵션이고, 값은 호출 할 함수입니다.
  • main 함수에서 for 루프는 사용 가능한 모든 옵션을 단계별로 실행하고 관련 함수의 docstring 인 & 옵션을 인쇄합니다. 이것은 관련 코드에 UI 문서를 첨부 할 수있는 한 가지 방법 일뿐입니다.
  • 이 예제에서 디스패치 함수는 모두 데코레이터 나 함수 인트로 스펙을 사용하여보다 복잡한 인수 전달이 가능할 수 있지만 호출 코드를 단순화하므로 똑같은 인수를 허용합니다.여기에서는 사전과 같이 변경 가능한 항목을 사용하여 디스패치 기능이 주변 범위의 데이터를 수정할 수 있도록하는 방법을 보여 줬습니다. 우리는 그것을 메뉴의 루프 동안 입력에서 빠져 나가기 위해 사용한다.
  • 마지막으로 사용자가 값을 입력하고 사전에서 찾아 보며 존재하는 경우 관련 함수를 호출하여 settings을 사용했는지 여부를 전달합니다. 우리는 dispatch 함수가 필요하지 않다면 dispatch 함수가 그것을 무시할 것으로 기대한다.

이렇게하면 모든 코드가 멋지게 중첩되지 않은 기능 단위로 분리됩니다. 로트 중첩 된 블록 인 경우보다 코드를 재사용하기가 더 쉽습니다.

+0

+1 좋은 조언을 위해, 그것은 사실상 당신이 조건을 중첩 할 수 있다는 것을 모르는 사람에게 과잉이라고 할지도 모릅니다. 하지만 올바른 길에서 시작하는 것이 더 중요 할 수 있습니다. 나는 개인적으로 매우 비색 적이 지 않아서 판단하기가 어렵습니다. – octern