01. CS50P - Lecture 0 - Functions, Variables
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: 값을 계산해서 그 자리에 남겨줍니다. 이 값은 변수에 저장하거나 다른 수식에 사용할 수 있습니다.