2017-11-18 1 views
0

getInteger에 사용자로부터 값을받습니다.다른 함수에서 내 함수 호출하는 방법

출력을 sqInteger에서 getInteger으로 가져와야합니다.

변수를 설정하거나 sqInteger 함수를 들여 쓰는 것에 관계없이 변수 x은 정의되지 않습니다.

x 변수를 전달하고 전달하기위한 회신 줄을 추가했지만 이는 분명 도움이되지 않습니다.

제가 누락 된 부분을 이해하겠습니다.

def getInteger(): 
    while True: 
     try: 
      x = int(input('Enter an integer: ')) 
     except ValueError: 
      print() 
      print('That\'s not an integer. Try again.') 
      continue 
     else: 
      return x 
      print(x) 
      break 

def sqInteger(getInteger, x): 
    y = x**2 
    print(y) 

답변

0

전체 코드입니까? 루프가 시작되기 전에 코드의 어느 시점에서 getInteger() 함수를 호출해야합니다. 언제든지 sqInteger() 함수를 호출하지 않습니다.

예외 처리기는 즉시 try 블록 평가를 중지하고 입력에 정수가 입력되지 않은 경우 except 블록으로 이동합니다. 따라서 input() 기능 후에 sqInteger() 함수에 전화를 걸 수 있습니다. 사용자가 비 정수를 터미널에 입력하면 Exception 핸들러로 이동하여 사용자에게 다시 시도하라는 메시지를 표시합니다. 정수를 입력하면 코드는 계속 평가되고 함수 sqInteger이 실행됩니다.

getIntegersqInteger() 함수에 전달할 필요가 없습니다. 기술적으로 파이썬에서 함수를 매개 변수로 전달할 수는 있지만이 프로그램에는이 코드가 필요하지 않을 수도 있습니다.

그래서 다음과 같은 코드가 적합 할 것 :

def getInteger(): 
    while True: 
     try: 
      x = int(input('Enter an integer: ')) 
      # variable 'squared' now receives the return value from the function 
      squared = sqInteger(x) # call to function sqInteger necessary for this function to be executed 
     except ValueError: 
      print('That\'s not an integer. Try again.') 
      continue 
     else: 
      print(x) # if user entered 2, prints 2, not 4 
      return x # this value is still only what the user input, not the result of sqInteger() 
      break 

def sqInteger(x): 
    y = x**2 
    print(y) 
    return y #you need to return values from functions in order to access it from outside the function 

당신이 (매개 변수로) 함수에 변수를 전달하는 이유는 변수에 그 기능에 대한 액세스 권한을 부여하는 것입니다. 함수를 만들면 해당 함수의 로컬 범위가 만들어 지므로 해당 함수 내에서 명명 된 변수가 해당 함수 외부의 변수와 별개의 네임 스페이스에 있습니다. 이것은 많은 변수가 존재할 수있는 대규모 프로그램에서 유용하며 이들 변수를 별도로 유지해야합니다.

sqrt 함수를 별도로 정의 했으므로 범위 외부의 변수에 액세스 할 수 없습니다. 액세스 권한이 필요한 변수를 전달해야합니다.

함수를 실행하기 전에 함수를 호출해야합니다. 함수 정의는 기능을 하나의 기능 단위로 호출 할 수 있도록 설정하는 역할 만합니다. 프로그램 내에서 우려를 분리하는 데 유용합니다. 함수를 호출하는 기능은 유용합니다. 코드를 분리하고 전체 기능을 나머지 코드와 함께 쓰지 않고 함수에 대한 단일 호출만을 언급 할 수 있기 때문입니다. 또한 코드 재사용이 가능합니다.

당신은 또한 같은 값을 반환하고 함수 호출이 값을 할당하여 제곱 정수의 결과에 액세스 할 수 있습니다

# lets say x = 4 
squared = sqInteger(x) 

def sqInteger(x): 
    y = x**2 
    return y 

이 작동하지 않을 것입니다 :

x = input("Enter integer") #lets say you enter 3 
squared = sqInteger() 
print(squared) 

def sqInteger(): 
    print(x) # error: x is not defined 
    return x**2 # error: x is not defined 

이 함수는 x과 같은 외부 변수에 액세스 할 수 없습니다. 이 변수를 매개 변수로 전달해야이 함수를 호출하고 원하는대로 매개 변수를 설정할 수 있습니다. 이것은 프로그램의 모듈성을 위해서입니다. 매개 변수로 모든 종류의 다른 정수를 전달할 수 있으며 정수를 제곱 할 필요가있을 때마다 재개 가능한 함수를 가질 수 있습니다.

편집 : 죄송이 엉망이었다, 나는 마침내

+0

이 설명 주셔서 감사합니다 ...하지만 내 설명에있는 모든 오류를 수정, 그것은 매우 도움이! 내 코드를 편집 할 때 사용자가 입력 한 정수는 인쇄되지 않습니다. 이는 제곱 정수 인쇄 외에 요구 사항입니다. sqInteger (x)가 입력 후 바로 호출되기 때문에이 인쇄 명령을 건너 뛰고 있습니까? – saj0991

+0

제곱 값이 아닌 사용자가 입력 값을 인쇄하고 싶습니까? 실제로는'else' 블록으로 가서'print (x)'문을 'return'문 위로 옮겨야합니다. return 문은 현재 함수의 실행을 멈추고 즉시 함수가 호출 된 곳으로 돌아갑니다. ergo, 그 후에 print (x) 함수는 실행되지 않습니다. 위의 주 코드 블록을 편집하여이를 반영합니다. – cchoe1

+0

알았어요! 정말 고맙습니다! – saj0991

관련 문제