멋쟁이사자처럼 백엔드 Python 교육 2일차 변수, 함수

박재정·2025년 1월 2일

학습정보

목록 보기
3/29

변수 값 바꾸기 문제 해답👌
저번시간 복습
유명한 스왑 코드 중 하나

a = 10, b = 20 일 때, 'temp' 변수를 사용해서 a와 b의 값을 바꾸시오
a, b = b, a
temp = a
a = b
b = temp 를 입력하세요

a = 10, b = 20 일 때, 'temp' 변수를 사용해서 a와 b의 값을 바꾸시오

a, b = b, a 
 temp = a #temp를 임시값으로 사용 
  a = b
  b = temp     
1. 메모리에서 a의 주소에는 값 10이 저장되고, b의 주소에는 값 20이 저장됩니다.
   temp = a 실행:
2. temp에 a의 값(10)이 저장됩니다. 이제 temp의 주소에는 값 10이 있습니다.
   a = b 실행:
3. a는 이제 b의 값(20)을 저장합니다. 따라서 a의 주소에는 값 20이 저장됩니다.
   b = temp 실행:
4. b는 이제 temp의 값(10)을 저장합니다. 따라서 b의 주소에는 값 10이 저장됩니다.

함수 (function)

def 함수명: [함수 내용]
...
긴 코드를 한 단어로 축약할 때 그냥 def 쓰고 작명하고 (): 붙이고, indent 넣으면 함수 하나 뚝딱

ㆍ 함수에서 return은
1. 값을 반환할 때
2. 특정 조건을 빠져나갈 때 (함수를 종료시킬 때)

 def 함수2() :
 	return 10
함수2() #출력 안됨

def 함수2() :
	   return 10
print(함수2()) #이렇게 해야 출력됨

2-1 함수 만들 때 주의할 점

2-1-1. 들여쓰기를 해야 한다. (설정이나 도구에 따라 다를 수 있다)
- vscode는 기본적으로 PEP 8 스타일 가이드라인을 따르도록 되어 있어 4개의 들여쓰기를 사용
- 그러나 colab는 웹 기반 환경으로, 들여쓰기에 조금 더 유연하게 대응할 수 있다. 따라서 1개의 공백 으로
들여쓰기를 할 수 있으며, 이는 코드 실행에 문제 x
다만, 가독성과 코드의 일관성을 위해서 대부분의 경우 4개의 공백을 사용하는 것을 권장한다. 특히 여러 명이 협업하는 프로젝트에서는 이러한 일관성을 유지하는 것이 중요함.

2-1-2. 함수를 만든 후, 한 행 띄워주기 (가독성을 위해)

ex)
def great():
    print('Hello World")
    great() << x
great() << 0def add (a, b):  # (a, b) 함수의 인자 혹은 파라미터
      sum = a + b
      return sum
  add(3, 5)  # 함수 호출(call, revoke라고 부르기도 함)

- def add(a, b):
      return int(sum(a, b))
  add(1, 3)
OR
  def add(a, b):
      sum = a + b
      return sum
  print(add(1, 3))
OR
  def add(a, b):
      return a + b
  print(add(1, 3))

2-1-3. 함수를 호출 할 때, 초기화된 변수를 제외한 나머지 인수에 맞게 값을 전달해야 한다.

ex)
     def add(x, y, z = 3):
         sum = x + y
         sum += z
         return sum
     print(1) # Type Error

2-1-4. 함수 인자에서 변수를 초기화 할 때, 항상 마지막 자리에 배치해야 한다. (인수의 모호성을 피하기 위함)
ex)
def add (x, y = 2, z): < x
def add (x, y, z = 2): < o

2-1-5. 함수(변수) 이름 작명

5-1 스네이크 표기법
- 식별자를 뱀의 모양처럼 만든다 해서 붙여진 표기법
- 단어 사이의 underscore(_)를 활용하는 표기법, 주로 Python에서 사용함
ex} user_name, retention_score

5-2 낙타(camel) 표기법
- 대문자와 소문자의 조합이 낙타의 혹처럼 솟았다가 내려갔다가 하는 모양 같다해서 붙여진 표기법
- 첫 번째 단어는 소문자로, 이어지는 단어들의 시작은 대문자로 작성
- 주로 Java 언어 에서 사용함
ex) getUserName, findByUserName


  1. 파이썬 에서만 제공되는 함수 기능

    3-1. 함수 파라미터에서 변수를 초기화 할 수 있다.
    ex)
    def say_myself(name, age, man=True):
    print(name, '입니다')
    print('나이:', age)
    print('남자입니까', man)
    say_myself('홍길동', 27)

    # 홍길동 입니다. 
    # 나이: 27 
    # 남자입니까 True

    3-2. 리턴값이 두 개 이상 일 수 있다.
    ex)
    def example():
    return 1, 2, 3
    a, b, c = example()
    print(a, b, c) # 1, 2, 3
    3-3. 왜 함수를 사용해야 할까?

  2. 코드의 재사용성을 높이기 위해

  3. 가독성 향상

  4. 유지보수가 용이함

    5-2 문자열 덧샘
    num = '31' + '32'
    print(num) # 3132

  • 메모리 올라가는 과정
  1. '31'과 '32' 각각 고유한 메모리 주소가 할당된다.

  2. '+' 연산자는 문자열을 연결하는 역할을 한다. 그래서 '31'과 '32'는 '+' 연산자를 통해 새로운
    문자열 '3132'가 만들어지고, '3132'도 메모리에 할당되며 고유한 메모리 주소를 갖는다.

  3. 변수 num이 생성되고 문자열 '3132'의 메모리 주소를 참조한다. 즉, num 변수는 문자열 '3132'
    를 가리키는 포인터 역할을 한다.

  4. print(num) 함수가 호출되면, num 변수가 가리키는 문자열 '3132' 의 값을 출력한다.

    5-3 for문

    ㆍ for i in [0, 1, 2]:
    print(i)

    0
    1
    2

  5. 리스트 안에 있는 값들을 순서대로 i에게 넘긴다.

  6. print는 i 값을 받고, 콘솔에 출력한다

    ㆍ sum = 0
    for i in range(1, 11):
    sum += i
    print(i)

    55

  • range(1, 11)의 범위가 왜 1~10인가?
    ㆍ range() 함수는 '반열린 구간(half-open intervla) 개념을 사용한다.
    ㆍ range(start, stop):
    • start: 범위의 시작 값을 지정한다. 이 값은 포함된다
    • stop: 범위의 끝 값을 지정한다. 이 값은 -1 연산을 하여 포함한다.
      ㆍ반열린 구간 개념을 사용하는 이유
    • 반열린 구간이란 시작 값은 포함하지만 끝 값은 포함하지 않는 구간을 의미하며, 수학적으로는
      1 ≤ x < 11로 표현한다.
      ㆍ반열린 구간 장점
    • python의 리스트 인덱싱과 일관성 유지
    • 배열 길이와 자연스럽게 연계
      ex) 배열의 길이기 10인 인덱스는 0부터 9까지
    • 연속된 범위 처리가 용이함
    • 반복문 사용 시 직관적인 횟수 파악
    • 오류 가능성 감소
    • 반복문 작성 시 명확한 의도 전달
      이러한 설계는 Python의 철악인 "명확함이 애매함보다 낫다"는 원칙과 일치하며, 실제 프로그래밍에서 많은
      이점을 제공한다. 특히 배열 처리, 반복문 작성, 인덱스 계산 등에서 직관적이고 효율적인 코드 작성을
      가능하게 한다!

1. 아래의 함수에서 에러가 나는 이유는?🚑

def say_myself(name, age = 27, man):
	pass

pass는 나중에 작업하려고 그냥 생략해두는것
man 파라미터에 초기값을 부여하거나 ex) def say_myself(name, age = 27, man=true ):
or age랑 순서를 바꿔준다. def say_myself(name, man, age = 27)

2. 아래의 함수를 완성하시오.🚒

x,y = result(5,2)
print(x,y) # 7 3 


def result(num1, num2):
    add = num1 + num2  
    sub = num1 - num2
    return add, sub
x, y = result(5,2)
print(x,y) # 7 3 

3. return 이 결과값 없이 단독으로 쓸 때 의미 🎈

함수 종결을 의미

4. 함수 초기화란?🎡

값을 처음으로 할당하는것
a = 1 # 초기화임
a = 2 #-> 두번재 할당은 초기화라 하지 않음

5.다음 함수에 대하여 설명하시오 🎆

  • eval : str형식의 수식을 int,float형식으로 해석하는 함수.
    (보안에 취약하여 사용을 하지는 않는다.)
  • input : 키보드로 정보를 입력받는 함수
  • id : 저장된 메모리 주소 조회 함수
  • type : 데이터 타입 조회 함수
  • range : for문 사용시 범위 지정함수
  • int : 정수형 타입
  • float: 실수형 타입

6. 1부터 1000까지의 합을 구하시오. 🧔

sum = 0 #변수 지정 
for i in range(1,1001): #범위 지정
  sum = sum + i #함수식 적용
print(sum) #출력 

7. 파이썬에서 주석의 종류는? 🙌

주석 종류
ㆍ #, ### : 한 줄 작성할 때 쓰는 주석
ㆍ ''' ''' OR """ """ : 여러 줄을 작성할 떄 쓰는 주석, 보통 클래스 안에서 설명할 때 쓰임
ㆍJava 에서는 // 와 / / 로 씀

8. 아래 구구단을 짜시오.🤦‍♀️

gugudan=5 # 내가 짠거 이렇게 하면 구구단을 매번 변경해야함

for i in range(10): 
  print("5 *",i,"=", gugudan*i)
  
def gugudan(dan):  #이렇게 만들면 변경이 쉬움 
  for i in range(1,10):
    print(dan, "*", i, "=", dan*i)
    
gugudan(5)
print()
gugudan(6)

9. 아래 1단부터 9단까지 나오도록 하시오.(2중 for문)🐱‍🐉

for i in range(1,10):
   for j in range(1,10):
      print(i, "*", j , "=", i*j)
   print("-----")

10. 아래가 에러가 나는 이유를 설명하시오.😜

str = input("1234");
for i in range(10) :
  print("Hello world" + str(i))

문제점
1.str = input("1234"); <- 이부분의 마지막에 ';' 이 있음
2.예약어(str)가 변수명으로 저장이 되어있음. 변수명으로 예약어 설정 X

11. 컴퓨터에서 실수에 오차가 있는 이유는?🐱‍🏍

ㆍ num1 = 1.000000000000001
num2 = 1.1
print(num1 + num2)
2.1000000000000014

  • 원인: 이 현상은 부동 소수점 연산의 특징 때문에 발생한다.
    컴퓨터는 숫자를 이진수(0과 1)로 저장한다. 부동 소수점 수는 특정 형식에 따라 이진수로 표현된다.
    이 과정에서 일부 소수점 이하의 값은 이진수로 정확하게 표현될 수 없기 때문에, 가장 근사한 값으로
    저장된다. 구체적으로 설명하면
    1. 부동 소수점 수는 일반적으로 가수(significand), 지수(exponent), 그리고 부호(bit)로 구성됩니다. 이는 컴퓨터 메모리 서 숫자를 효율적으로 저장하고 계산하기 위해 사용됩니다.
    2. 십진수(기본 10)에서 정확하게 표현할 수 있는 값들이 이진수(기본 2)로는 정확하게 표현될 수 없습니다. 예를 들어, 0.1이라는 값은 이진수로 정확하게 표현할 수 없기 때문에, 컴퓨터는 이를 가장 근사한 값으로 저장합니다. 이는 마치 소수 1/3을 십진수로 표현할 때 0.333...으로 무한히 반복되는 것과 비슷합니다.
    3. 따라서 여러 부동 소수점 수를 연산할 때, 각 수의 근사값이 연산에 포함되어 오차가 축적될 수 있습니다.
      이로 인해 연산 결과가 예상과 다를 수 있다.
  • 해결 방안
  1. 필요한 소수점 이하 자릿수를 지정하여 반올림
  2. 고정 소수점 형식을 사용하여 정밀도를 유지
    result = num1 + num2
    print(f"{result:.10f}") # 2.1000000000
  3. 1 + 3.14는 정수형과 실수형이기 때문에 계산 불가
    따라서 1.0 + 3.14 정수형을 실수형으로 바꿔서 계산하면 가능!

12. 아래를 코딩하시오. 👏

#rec_area(3,4) 사각형 넓이 구하는 함수

def rec_area(x,y):
    area = x * y
    print(area)
rec_area(3,4)

tri_area(2,5) # 삼각형 넓이 구하는 함수

def tri_area(2,5):
	area = (x * y)/2
    print(area)
tri_area(2,5)

circle_area(2,5) # 원의 넓이를 구하는 함수

def circle_area(x):
    area = x*x*3.14
    print(area)
circle_area(2)

3줄요약

  1. 구구단은 외워주세요.
  2. 숫자형 에는 실수와 정수형 두개의 데이타 타입이 있습니다.
  3. 파이썬에서는 들여쓰기를 잘해 주셔야 해요.
   
profile
파이썬, SQL 개발

0개의 댓글