Python & Ruby

함수 (function)

함수란 무엇인가?

함수 만들기

Python

def a3():
    print('aaa')
a3()

Ruby

def a3()
    puts('aaa')
end
a3()

실행결과

aaa

Python | Ruby 

리턴값

Python

def a3():
    return 'aaa'
print(a3())

Ruby

def a3()
    return 'aaa'
end
puts(a3())

실행결과

aaa

Python | Ruby 

입력값

 Python

def a(num):
    return 'a'*num
print(a(3))

Ruby

def a(num)
    return 'a'*num
end
puts(a(3))

실행결과

aaa

Python | Ruby

여러개의 입력값

 Python

def make_string(str, num):
    return str*num
print(make_string('b', 3))

Ruby

def make_string(str, num)
    return str*num
end
puts(make_string('b', 3))

실행결과

aaa

Python | Ruby

로그인 애플리케이션 (루비)

puts("아이디를 입력해주세요")
input_id = gets.chomp()

def login(_id)
  members = ['egoing', 'k8805', 'leezche']
  for member in members do
      if member == _id
          return true
      end
  end
  return false
end

if login(input_id)
  puts('Hello, '+input_id)
else
  puts('Who are you?')
end

 ideone.com

로그인 애플리케이션 (파이썬)

input_id = input("아이디를 입력해주세요.\n")
def login(_id):
    members = ['egoing', 'k8805', 'leezche']
    for member in members:
        if member == _id:
            return True
    return False
if login(input_id):
    print('Hello, '+input_id)
else:
    print('Who are you?')

ideone.com

참고

github.com

댓글

댓글 본문
작성자
비밀번호
  1. dlrbrhkdww@hotmail.com
    return false 쓰는이유야 프로그램을 종료시켜서 그뒤에것들을 안나오게 하는것인데 return false 부분코드를 지워도 who are you 가 나오지않네요
    그럼애초에 return false 라는코드는 필요없어도 되는거아닌가요 ?
    return false 가잇어도 제대로되고 없어도 제대로 작동외는데 잇는이유를 잘 이해를못하겟네요
  2. GoldPenguin
    완료했습니다.
  3. 김태윤
    함수 완료!
  4. hello world~
    함수(function) 완료
    감사합니다~
  5. 파이떤
    for 문에서 가지고있는 값을 돌리고, 거기서 입력한 값과 같느냐를 확인해주려고 member == _id 를 지정해주는겁니다.
    예를들어 님이 로또를 한다 가정하고, 30번 번호를 입력하고 그 30번 공을 가지고 있습니다. 그리고 추첨기계를 1-45번 공을 순서대로 확인해서 같은게 있냐 확인하는겁니다.
    당신이 가지고 있는 공 = [30]
    추첨기계공=[1,2,3,4,5,,,,,,,,,,44,45]

    30==1? who are you
    30==2? who are you
    .
    .
    .
    30==30? hello
    대화보기
    • J.Y.Oh
      좋은 정리 감사드립니다. 많이 배우고 갑니다.
    • ikjus1
      input_id = input("아이디를 입력해주세요.\n")
      def login(_id):
      members = ['egoing', 'k8805', 'leezche']
      for member in members:
      if member == _id:
      return True
      return False
      if login(input_id):
      print('Hello, '+input_id)
      else:
      print('Who are you?')

      for member in members:
      ----if member==_id: => 만약 member 에 있는 인자가 _id와 같다면 결과값이 True다

      라고 저는 생각햇는데 최초에 input_id 값이 무슨 값을 넣어서 member 인자와 _id가 같을수 없는것 아닌가요??? _id값을 설정하는 곳이 if login(input_id):라는 곳에서 최소에 넣은 input_id값이 =>_id=[]값으로 들어가서 Hello, input_id=[최초값]이 나오느것 아닌가요..? 이해가 안가네요...

      요지는 for문 에서 member == _id를 왜 지정했는 가입니다 _id값이 =[] 항상 지정되지 않아서 member==_id 이 될수없는것아닌가요?
    • 미림_likelion
      수강 완료했습니다. 감사합니다.
    • bumdori2
      else 구문에서 리턴을 해버려서 그렇습니다.
      else 구문에 암것도 안쓰시면 되요.
      대화보기
      • 조유빈
        (첫번째 질문에 대해서만 답글 달겠습니다.)

        많이 헷갈리는 부분이며, 사람이 보기엔 한끗 차 같지만
        컴퓨터는 전혀 다르게 인식하고 작동하는 대표적인 예입니다.

        for 구문을 통해서
        'member'라는 object는
        members list 내부의 sy, hj, hw를
        순차적으로 가져다쓰는데요

        즉,

        member = sy
        member = hj
        member = hw

        가 for 구문 내에서 차례대로 돌게 됩니다.

        1) sy를 썼을 경우

        member = sy
        → 조건문 비교 sy == sy
        → return True (바로 함수 종료)
        → login(input_id) = True
        → print("hello"+input_id)실행

        (문제없어보입니다만,,,,,질문하신 바와 같이 아래가 문제입니다.)

        2) hj(혹은 hw)를 썼을 경우
        member = sy (← for in 구문은 상술한 바와 같이 list의 값을 처음부터 차례차례 모두 데려옵니다.)
        → 조건문 비교 sy == hj
        → if 뒤의 값 False
        → else로 이동(***)
        → return False (함수 종료)
        → login(input_id) = False
        → print("누구세요") 실행

        따라서 (***)부분은 우리가 의도한 바가 아니며,
        for 구문이 첫값인 sy외에 나머지 hj, hw도 가져올때까지는
        아직 False를 return하면 안되겠죠?
        (말하자면 for in 구문이 members 내부의 값을 다 찾는 동안 '기다려줘야' 합니다.)

        즉, False가 return되어야할 시점은 for in 구문이 종료된 이후입니다.
        대화보기
        • dkfdktjanjgkrp
          2가지 질문을 하려고 합니다.. 혹시 아시는 분 계시면 답글 부탁드려요~
          1. input_id= input("아이디를 입력해주세요.\n")
          def login(_id):
          members=['sy', 'hj', 'hw']
          for member in members:
          if member==_id:
          return True
          else:
          return False

          if login(input_id):
          print("hello"+input_id)
          else:
          print("누구세요")

          => 여기서 for문 안에 else: return false를 쓰면 'sy'일때만 출력값이 hello sy이 나오고 'hj', 'hw'는 누구세요. 가 나오네요 ㅠㅠ 혹시 왜 그런지 로직을 설명해주시면 감사하겠습니다

          2.
          input_id= input("아이디를 입력해주세요.\n")
          def login(_id):
          members=['sy', 'hj', 'hw']
          for member in members:
          if member==_id:
          return True

          if login(input_id):
          print("hello"+input_id)
          else:
          print("누구세요")
          => 동영상 강의는 for 이 끝날 때, return false를 했는데, return false를 굳이 입력하지 않아도 결과가 동일하게 출력되더라구요.. 꼭 return false를 해야하나요???
        • JustStudy
          return 값은 그 함수가 수행한 후 함수명의 값으로 되돌려 주는 값이거든요, print나 put과 같이 화면에 값을 찍어 주는 것이 아니죠.
          login()함수를 호출했을 경우 return True라고 한다면, login()의 값이 True인 것과 같습니다.
          따라서, True나 False를 화면에 찍어 주려면, print(login(input_id))라고 해야 하겠죠.
          대화보기
          • NoobUnityStarter
            제가 잘 이해했는지는 모르겠네요, 아시는분 계씬다면 지적 부탁드립니다.
            https://youtu.be......HHs

            제가 유트브로 한번 아는데로 설명해봤습니다.
          • 심화평
            으릅다 으려워 ㅜㅜ 17-06-20 감사합니다.
          • 4노라면
            오~~무슨 뜻인지 이해(여러번 읽어보고 이해가 되네요 ㅎㅎ)가 됩니다.

            감사합니다~^^
            대화보기
            • Jaewon Lee
              저도 초급 비전공자라.. 제 아는 한에서 답을 해 드리자면...
              -----------------------------------
              우선 if member.... 문이 for 문에 속하는 문이므로 안쪽으로 한번 더 들여쓰기 해야할 것 같구요.

              결과만 보면 차이는 없을 수 있지만,
              login 이라는 함수를 다른 코딩에서 활용할 수 있는 확장성에서는 크나큰 차이가 있다고 보시면 될 것 같아요. egoing님이 작성한 login 함수의 경우, 아이디 확인에 따른 T/F 값을 반환하기에 이를 활용하여 다른 함수에서 얼마든지 활용할 수 있게 되겠지만,

              4노라면 님이 작성한 login 함수의 경우, 반환값이 (egoing 입력시) 'Hello, egoing' 이나, (abfc 입력시) 'Who are you?' 라는 반환값만 나오므로 이를 활용할 수 있는 확장성에는 큰 제약이 발생한다고 보여지네요.
              -----------------------------------
              여기까지 초급자 입장에서 개인적으로 생각이 드는 차이점입니다. ^^
              대화보기
              • 나만의 부
                2017.04.18 감사합니다~
              • edoctor
                저는 코딩을 생활코딩을 처음배우는 사람이라 정확히 이해한건지 모르겠지만 제가 이해한대로 설명드리겠습니다.

                5.py 를 기준으로 함수구문은 return False로 끝이납니다. 그 함수구문은 결국 'True' 혹은 'False' 라는 결과값을 내게 되고, 그 다음 나오는 if else 구문은 함수에서 결과로 낸 ' True' 혹은 ' False' 의 결과 값에 따라서(불리언) 실행되는 것입니다. 그래서 input_id 와 _id 가 달라도 상관이 없게 되는 것입니다.
                결국 컴퓨터에서든, 수학에서든 달라도 아무런 문제가 없게 됩니다.
                대화보기
                • 4노라면
                  input_id = input("아이디를 입력해주세요.\n")
                  def login(_id):
                  ++++members = ['egoing', 'k8805', 'leezche']
                  ++++ for member in members:
                  ++++ if member == _id:
                  ++++++++ return 'Hello, '+_id
                  ++++return 'Who are you?'
                  print(login(input_id))
                  리턴값을 이렇게 주는것 하고 차이가 있는건가요?
                • 달리는 중입니다.

                  모두들 화이팅 하세요.
                • http://ideone.com/aFNlX5

                  이렇게도 해봤는데 어떤 부분이 문제라서 문구가 세 개씩이나 뜨는 걸까요? ㅠ
                • seeong2
                  ---------------4.py--------------------------------------
                  def a(str,num):
                  return str*num
                  input_str = input('say something?\n')
                  input_num = input('how many?\n')
                  print(a(input_str,int(input_num)))
                  --------------------------------------------------------
                  $ python3 4.py
                  say something?
                  hi
                  how many?
                  2
                  hihi
                • Philip Oh
                  수포자였는데, 다시금 함수란 단어를 듣게될줄이야...
                  좋은 강의 감사합니다~
                  다시 돌려 봐야겠습니다 ㅋㅋ
                • cancaodosang
                  /*수학에서의 함수를 생각해보면 f(x) = x + 1 이라는 함수가 있다고 했을 때, x 를 매개변수라고 하고 어떤 수를 대입하더라도 작동을 하는 것을 알 수 있죠. f(2) = 2 + 1 ..... f(3) = 3 + 1 ..... 이런식으로 말입니다. (여기서 실제 대입된 값 2와 3은 매개변수와는 별도로 전달인자(argument)라고도 합니다.) */

                  --->f(3)=5+1 라는 함수가 컴퓨터에서는 잘 작동은 할지몰라도, 일반 상식으로 이해를 할려니깐, 도통 이해 하기가 어렵습니다.
                • 강군
                  지나가다가 도움이 될까 싶어 댓글답니다.

                  함수를 정의할 때 def login(_id) 에서 괄호 안에 _id 를 매개변수(parameter) 라고 합니다. 주지하신대로 어떤 문자(이미 지정된 함수를 피하는 것이 좋지만)를 사용해도 작동하게 됩니다. 어렵게 생각하실 필요 없습니다. 매개변수는 그 함수 내에서만 작동하는 지역변수이고 함수를 호출할 때 입력 값으로 쓰인 input_id 값을 그대로 전달받아 정의된 함수 내에서 쓰이게 됩니다. (호출할 때 쓰인 변수(input_id)와 정의할 때 쓰인 매개변수(_id) 가 같을 필요는 없습니다. 실제 값(value)는 똑같지만요)

                  수학에서의 함수를 생각해보면 f(x) = x + 1 이라는 함수가 있다고 했을 때, x 를 매개변수라고 하고 어떤 수를 대입하더라도 작동을 하는 것을 알 수 있죠. f(2) = 2 + 1 ..... f(3) = 3 + 1 ..... 이런식으로 말입니다. (여기서 실제 대입된 값 2와 3은 매개변수와는 별도로 전달인자(argument)라고도 합니다.)

                  위의 예제를 보면, if 문에서 login 함수를 쓰면서 코드 맨 첫 줄 input 함수로 받은 input_id 변수를 login 함수의 입력값으로 쓰고 있죠. 여기서 input_id는 그대로 login 함수가 정의된 def login(_id) 의 _id 값으로 대입됩니다. 그것이 나중에 리스트에 들어있는 값과 비교될 때 사용이 되고 return 값은 True 혹은 False 로 출력이 되어 본래 함수를 호출한 if 문에서 쓰이게 되죠.

                  도움이 되었으면 좋겠습니다.
                  대화보기
                  • 강군
                    지나가다가 도움이 될까 싶어 댓글답니다.

                    함수를 정의할 때 def login(_id) 에서 괄호 안에 _id 를 매개변수(parameter) 라고 합니다. 주지하신대로 어떤 문자(이미 지정된 함수를 피하는 것이 좋지만)를 사용해도 작동하게 됩니다. 어렵게 생각하실 필요 없습니다. 매개변수는 그 함수 내에서만 작동하는 지역변수이고 함수를 호출할 때 입력 값으로 쓰인 input_id 값을 그대로 전달받아 정의된 함수 내에서 쓰이게 됩니다. (호출할 때 쓰인 변수(input_id)와 정의할 때 쓰인 매개변수(_id) 가 같을 필요는 없습니다. 실제 값(value)는 똑같지만요)

                    수학에서의 함수를 생각해보면 f(x) = x + 1 이라는 함수가 있다고 했을 때, x 를 매개변수라고 하고 어떤 수를 대입하더라도 작동을 하는 것을 알 수 있죠. f(2) = 2 + 1 ..... f(3) = 3 + 1 ..... 이런식으로 말입니다. (여기서 실제 대입된 값 2와 3은 매개변수와는 별도로 전달인자(argument)라고도 합니다.)

                    위의 예제를 보면, if 문에서 login 함수를 쓰면서 코드 맨 첫 줄 input 함수로 받은 input_id 변수를 login 함수의 입력값으로 쓰고 있죠. 여기서 input_id는 그대로 login 함수가 정의된 def login(_id) 의 _id 값으로 대입됩니다. 그것이 나중에 리스트에 들어있는 값과 비교될 때 사용이 되고 return 값은 True 혹은 False 로 출력이 되어 본래 함수를 호출한 if 문에서 쓰이게 되죠.

                    도움이 되었으면 좋겠습니다.
                    대화보기
                    • 감사합니다~ 정말 깔끔하고 쉽게 설명잘하시는거같아요 ㅎㅎ
                    • 2017.01.04 완료
                    • 쥬슈야
                      _id 부분이 도저히 이해되지 않습니다. 일단 현재 강좌는 2번씩 봐봤습니다.
                      _id부분을 다른 문자로 바꿔서 사용해도 작동이 잘 된다는 것도 확인해봤습니다. 예를들어 _id 부분을 xyz 로 바꿔서 작성해도 잘 작동 되더라고요. 궁금한점은 login() 여기에서 괄호안의 내용이 어떻게 적용되는 건지 자세히 알고 싶습니다.

                      이고잉님이 평소처럼 시간의 흐름에 따라 화살표를 그어가며 코드들이 작동되는 원리를 설명해주시는 방식으로 한번 더 설명 해주실 수 있으면 좋겠습니다.
                    • 박상준
                      저도 처음에 똑같은 생각을 했었는데
                      파이썬을 기준으로 입력값 강의를 다시 생각해보다가 알게되었습니다.

                      def a(num):
                      return 'a'*num
                      print(a(100))

                      이 강의에서 우리는 a라는 함수에 변수를 num으로 정의하여 a(100)을 프린트했을때 a*100이 되는 것을 알 수있습니다. 이처럼 로그인에서도 def login(_id)는 login이라는 함수에 변수를 _id로 지정한것이고
                      if login(input_id)는 _id라는 변수에 input_id를 적용한 것이므로 결과값이 잘나오게됩니다.(a(100)을 적용한 것과 같음) 따라서 login(_id) 에 _id는 그저 변수를 지칭하기때문에 login(a)로 정의하고 if member == a:라고 함수를 바꿔도 결과값은 동일합니다. 답변이 길어졌는데 도움이 되셨으면 좋겠습니다.
                      대화보기
                      • 이정일
                        질문이 있는데요~ def login(_id)에 사용한 _id변수명과 입력받은 input_id 는 변수 명이 다른데 def login(_id)가 어떻게 작동되는지 이해가 안되네요..

                        입력값을 받아서 작동되게 되니 같은 변수명을 사용해야 하지 않나요?
                      • techlistwoo
                        「여러개의 입력값」의 「실행결과」는...
                        bbb 가 되겠군요 ^^
                        좋은 강좌 잘 보고 있습니다 ^^
                      • JustStudy
                        고맙습니다
                      • user0123
                        PHP 언어를 1년동안 배우다 와서 그런지
                        for in 문이 새롭네요.
                        쉽게 이해 되었습니다 ㅎㅎ
                      • 냐옹이
                        아주 설명을 잘하시네요. 쉽게 이해가 됩니다.
                        보통은 좀 더 어렵게 설명하더라구요..
                        고맙습니다.
                      • 검사무운
                        잘 봤습니다. 감사합니다.
                        아무리도 몇번은 돌려봐야겠네요.
                      • 개인적인 생각입니다만 if문에서 함수 호출을 하여 그 값을 리턴 받아서 다시 처리 하는 것보다는
                        로그인 함수에서 member와 id값을 대조하여 프린트 함수를 내부에서 호출해주는게 좀 더 이해하기 쉽고 용이하지 않을까 생각이 듭니다. 아래와 같이 파이썬 코드를 작성해보았습니다.

                        input_id = input("아이디를 입력해주세요.\n")
                        def login(_id):
                        members = ['egoing', 'k8805', 'leezche']
                        for member in members:
                        if member == _id:
                        print('hello, '+input_id)
                        import sys
                        sys.exit()
                        print('who are you?')
                        login(input_id)


                        들여쓰기가 안되네요 print('who are you') 문은 for 루프 문과 같은 선상의 들여쓰기 입니다.
                      • 흠흠
                        이부분을 이해하는데 3일이 걸렸습니다 ㅠ..(마지막코드) 대충보고 넘어가려했지만 코드를 외우고 왜 그렇게 동작하는지 이해하는데 3일이 걸렸네요. 저처럼 독학으로 혼자 처음으로 프로그래밍언어를 배우는사람은 여기서 막히는분들이 꽤 계실것같네요. 포기하지마세요!
                      • 예. 들여쓰기를 해야 합니다. 파이썬에서는 다른 프로그래밍 언어처럼 int main(void){int var = 824; return 0;} 처럼 들여쓰기를 하지 않아 읽기 힘들어지는것을 방지하기 위해서 들여쓰기를 해야합니다. : 표기 아래서부터요.
                        p.s 저랑 닉네임이 같으시네요 ㅎㅎ
                        대화보기
                        • 안녕하세요 파이썬의 함수가 들여쓰기 를 인식한다고 했는데 파이썬의 모든 구문은 들여쓰기을 통하여 정의가 되는건가요?
                        • sigakorea
                          이고잉님, "여러개의 입력값"의 실행결과는 bbb 입니다. ^^
                          항상 수고해 주셔서 감사합니다.
                        • Frank
                          고맙습니다. ^^
                        버전 관리
                        egoing
                        현재 버전
                        선택 버전
                        graphittie 자세히 보기