2013-08-09 4 views
3

어제 파이썬으로 프로그래밍을 시작 했으므로 저는 꽤 초보자입니다!변수가주기 중에 값을 변경합니다.

난 숫자 디버깅 중

(코드 아래 참조), 더 큰 31 넘으면 삽입 값이 숫자

  • 경우

    1. 을 확인해야이 기능을 가지고 내가 이해하지 못하는이 버그를 발견했습니다.

      1. 예를 들어, 31보다 큰 숫자를 고의로 선택했습니다. 45
      2. 다시 묻습니다. 예를 들어 올바른 번호를 선택합니다.
      3. 코드에서 voto 변수를 두 번 인쇄합니다 (주석 'POINT A'및 'POINT B'라고 함).

        7

        45

      와 나는 다시 aske 해요 : 출력에

    2. 내가 얻을 d를 눌러 다른 번호를 입력하십시오.

      while 루프가 시작된 직후에 변수의 값이 왜 변경되는지 이해할 수 없습니다.

      아주 간단한 단어를 사용해 나에게 설명해 주시겠습니까? (< - 제발 초심자 라 기억하십시오!) D :

      미리 감사드립니다!

      def controlla_voto(voto_lett): 
          flag=1 
          while flag: 
           for y in voto_lett: 
            if (ord(y) in range(48,58))==0: 
             voto_lett=raw_input("Invalid charachters, try again: ") 
             flag=1 
             break 
            else: flag=0 
          voto=int(voto_lett) 
          print voto # POINT A 
          while (voto in range(32))==0: 
           print voto #POINT B 
           voto_lett=raw_input("Invalid number, try again: ") 
           controlla_voto(voto_lett) 
          return voto 
      
  • +2

    '(ord (y) in range (48,58)) == 0'? 당신은'isdigit (y)가 아니란 뜻인가요? ' –

    +2

    붙여 넣은 프로그램의 들여 쓰기를 수정합니다. 그렇지 않으면 우리는 그것을 이해할 수 없다. –

    +0

    나는 당신을 도우려고 노력하고있다. 그러나 코드는 들여 쓰기가되어 있지 않으므로이 방법을 어떻게 호출 할 지 알 수 없다. – joaoricardo000

    답변

    2

    완벽합니다. 재귀 호출에서 반환 값을 잊어 버렸습니다.

    voto = controlla_voto(voto_lett) 
    

    을하지만 뭔가가 while 루프의 탈옥 할 필요가 :

    def controlla_voto(voto_lett): 
    flag=1 
    while flag: 
        for y in voto_lett: 
         if (ord(y) in range(48,58))==0: 
          voto_lett=raw_input("Invalid charachters, try again: ") 
          flag=1 
          break 
         else: flag=0 
    voto=int(voto_lett) 
    print voto # POINT A 
    while (voto in range(32))==0: 
        print voto #POINT B 
        voto_lett=raw_input("Invalid number, try again: ") 
        return controlla_voto(voto_lett) 
    return voto 
    

    또 다른 해결책은 될 것이다.

    +0

    답장을 보내 주셔서 감사합니다. 반환을 왜 추가해야합니까? – user2669155

    +3

    재귀 호출을 배우려면 먼저 재귀 호출을 알아야합니다 ... – joaoricardo000

    +0

    두 번째 호출의 결과를 얻으려고하기 때문에. – Jiminion

    관련 문제