study/python

01. CS50P - Lecture 0 - Functions, Variables

비전있세 2025. 12. 15. 16:15

https://www.youtube.com/watch?v=JP7ITIXGpHk&t=4s

파이썬 기초: 코드 작성과 함수 (Creating Code with Python)

이 문서는 파이썬(Python)의 기초 문법인 함수, 변수, 데이터 타입(문자열, 정수, 실수), 그리고 사용자 정의 함수에 대해 다룹니다.


1. 개발 환경과 첫 프로그램

텍스트 편집기와 터미널

  • VS Code (Visual Studio Code): 코드를 작성하고 편집하는 도구입니다. 파일 탐색기와 터미널 기능이 통합되어 있습니다.
  • 터미널 (Terminal): 텍스트 기반 명령(CLI)을 통해 컴퓨터와 소통하는 창입니다.
    • code hello.py: VS Code에서 hello.py라는 파일을 생성하거나 엽니다.
    • python hello.py: 파이썬 인터프리터를 통해 작성한 코드를 실행합니다.

첫 번째 코드: Hello, World

print("hello, world")

설명:

  • 소스 코드: 프로그래머가 영어와 유사한 문법으로 작성한 텍스트입니다.
  • 인터프리터(Interpreter): 컴퓨터는 0과 1(기계어)만 이해합니다. 파이썬 인터프리터는 우리가 작성한 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 통역(Interpret)하여 실행합니다.

2. 함수 (Functions)와 인자 (Arguments)

함수란?

함수는 특정 동작(Action)이나 행위(Verb)를 수행하는 명령어의 묶음입니다. 파이썬은 print와 같이 이미 할 일을 알고 있는 내장 함수들을 제공합니다.

인자 (Arguments)

함수가 동작하는 데 필요한 입력값입니다.

  • print("hello, world")에서 "hello, world"print 함수에 전달되는 인자입니다.

버그 (Bugs)

버그는 코드의 오류를 의미합니다.

# 잘못된 예시 (괄호를 닫지 않음)
print("hello, world"

결과: SyntaxError: '(' was never closed

설명:

  • SyntaxError(구문 오류): 파이썬의 문법 규칙을 어겼을 때 발생합니다. 에러 메시지는 오류가 발생한 파일, 줄 번호, 그리고 오류의 원인을 알려줍니다.

3. 변수 (Variables)

변수는 데이터를 저장하는 컨테이너(상자)입니다. 사용자 입력을 받아 저장하거나, 계산 결과를 담을 때 사용합니다.

입력 받기 (input)

# input 함수는 사용자에게 프롬프트(질문)를 보여주고, 입력받은 값을 반환합니다.
input("What's your name? ")

변수 할당

# '=' 기호는 '같다'가 아니라 '오른쪽의 값을 왼쪽에 할당(저장)'한다는 뜻입니다.
name = input("What's your name? ")
print("hello,")
print(name)

실행 결과:

What's your name? David
hello,
David

4. 주석 (Comments)과 의사 코드 (Pseudocode)

주석

코드에 대한 설명이나 메모를 남기는 기능입니다. # 뒤에 오는 텍스트는 컴퓨터가 무시하고 실행하지 않습니다.

# 사용자에게 이름을 물어보는 코드
name = input("What's your name? ")

왜 중요한가요?

  • 협업: 다른 개발자가 내 코드를 이해하는 데 도움을 줍니다.
  • 기록: 미래의 나에게 이 코드를 왜 이렇게 짰는지 알려줍니다.

의사 코드 (Pseudocode)

실제 코드를 작성하기 전, 사람의 언어로 논리적 흐름을 정리한 것입니다. 복잡한 문제를 해결할 때 훌륭한 설계도가 됩니다.

# 1. 사용자에게 이름을 묻는다
# 2. "hello"를 출력한다
# 3. 사용자의 이름을 출력한다

5. 문자열 (Strings)

문자열(str)은 텍스트 데이터입니다. 파이썬에서 텍스트를 다루는 다양한 방법을 알아봅시다.

문자열 연결과 매개변수

여러 개의 인자를 print 함수에 전달할 수 있습니다.

방법 1: + 연산자 (공백 없음)

print("hello, " + name) 
# 결과: hello, David (직접 공백을 넣어줘야 함)

방법 2: , 쉼표 (자동 공백 추가)

print("hello,", name)
# 결과: hello, David (쉼표는 자동으로 띄어쓰기를 하나 추가함)

print 함수의 숨겨진 매개변수 (sep, end)

print 함수는 기본적으로 설정된 매개변수 값이 있습니다.

  • sep=' ': 인자들 사이를 공백으로 구분합니다.
  • end='\n': 출력이 끝난 후 줄을 바꿉니다(개행).

줄 바꿈 없이 출력하기:

# end=""를 지정하여 줄 바꿈을 없앱니다.
print("hello, ", end="")
print(name)

따옴표 처리 (Escape Character)

문자열 안에 따옴표를 넣고 싶을 때 사용합니다.

  • 방법 1: 겉을 작은따옴표(')로 감싸기: print('hello, "friend"')
  • 방법 2: 역슬래시(\) 사용하기: print("hello, \"friend\"") (이스케이프 문자)

6. 문자열 메서드와 f-string

문자열 메서드 (String Methods)

문자열 변수가 자체적으로 가지고 있는 기능(함수)입니다. 점(.)을 찍어 사용합니다.

  • .strip(): 문자열 양쪽의 공백을 제거합니다.
  • .title(): 각 단어의 첫 글자를 대문자로 바꿉니다.
  • .split(): 문자열을 특정 기준(예: 공백)으로 자릅니다.

체인(Chain) 방식으로 연결해서 사용하기:

# 공백을 제거하고(strip), 첫 글자를 대문자로(title) 동시에 처리
name = input("What's your name? ").strip().title()

print(f"hello, {name}")

f-string (Formatted String)

파이썬 3.6부터 도입된 가장 직관적인 문자열 포맷팅 방법입니다. 문자열 앞에 f를 붙이고 중괄호 {} 안에 변수를 넣습니다.

print(f"hello, {name}")

7. 정수 (Integers)와 연산

기본 연산

  • + (더하기), - (빼기), * (곱하기), / (나누기)
  • % (나머지 연산, Modulo)

형 변환 (Casting)

input() 함수는 사용자가 숫자를 입력해도 항상 문자열(String)로 받아들입니다. 따라서 수학 연산을 하려면 정수(int)로 변환해야 합니다.

# 문자열을 정수로 변환(int)하여 계산
x = int(input("What's x? "))
y = int(input("What's y? "))

print(x + y)

중첩 함수(Nested Functions): int(input(...)) 처럼 함수 안에 함수를 쓸 수 있습니다. 안쪽(input)이 먼저 실행되고 그 결과가 바깥쪽(int)으로 전달됩니다.


8. 실수 (Floats)

소수점이 있는 숫자(float)를 다루는 방법입니다.

반올림 (Round)

round(숫자, [자리수]) 함수를 사용합니다.

x = float(input("What's x? "))
y = float(input("What's y? "))

z = x / y

# 소수점 둘째 자리까지 반올림
print(round(z, 2))

숫자 포맷팅

f-string을 사용하면 숫자의 표시 형식을 예쁘게 지정할 수 있습니다.

  • 천 단위 쉼표: f"{z:,}" (예: 1,000)
  • 소수점 자리수 제한: f"{z:.2f}" (소수점 둘째 자리까지 표시)
z = 10000 / 3
print(f"{z:,.2f}") 
# 결과 예시: 3,333.33 (쉼표와 소수점 동시 적용)

9. 사용자 정의 함수 (Defining Functions)

나만의 함수를 만들어 코드를 체계화할 수 있습니다. def 키워드를 사용합니다.

함수 만들기 (def)

def hello(to="world"):    # "to"는 매개변수, "world"는 기본값(Default value)
    print("hello,", to)

hello()          # 인자 없이 호출 -> 기본값 "world" 사용
hello("David")   # 인자 전달 -> "David" 사용

들여쓰기(Indentation): 파이썬에서 들여쓰기는 매우 중요합니다. 함수 내부에 속한 코드는 반드시 들여쓰기 되어야 합니다.

main 함수 구조

코드를 논리적으로 정리하기 위해 main 함수를 정의하여 실행의 시작점을 만드는 것이 관례입니다.

def main():
    name = input("What's your name? ")
    hello(name)

def hello(to="world"):
    print("hello,", to)

# 프로그램의 시작
main()

왜 이렇게 하나요?
main 함수를 사용하면 핵심 로직을 한눈에 파악할 수 있고, 함수들을 정의하는 순서에 구애받지 않고(main을 호출하기 전까지는 정의만 되어 있으면 됨) 코드를 짤 수 있습니다.


10. 반환 값 (Return Values)

함수가 작업을 마치고 결과를 호출한 곳으로 돌려주는 값입니다. print는 화면에 보여줄 뿐이지만, return은 값을 프로그램 내에서 재사용할 수 있게 해줍니다.

def main():
    x = int(input("What's x? "))
    print("x squared is", square(x))

def square(n):
    return n * n  # n의 제곱 값을 반환

main()

print vs return 차이점

  • print: 화면에 결과를 출력하고 끝납니다. (사이드 이펙트)
  • return: 값을 계산해서 그 자리에 남겨줍니다. 이 값은 변수에 저장하거나 다른 수식에 사용할 수 있습니다.