bootcamp

241231 점프 투 파이썬 (4)

밤하늘바라기s 2024. 12. 31. 03:17

이하 내용은 강의와 위키독스의 e북을 참고하여 정리하였다.

강의 : 파이썬 기초 2024점프투파이썬 - YouTube

e북 : 점프 투 파이썬 - WikiDocs

 

1. 파이썬 입출력

1) 함수

  • 함수는 "반복적으로 사용하는 부분"을 하나로 묶은 것.
  • 기능 단위로 분리한다고 생각하면 됨.
  • " def 함수_이름(매개변수) : 수행할 내용 " 이 기본 구조. definition, 함수를 정의한다는 것.
  • 매개변수(parameter) 는 함수에서 정의되어 사용되는 변수
  • 인수(arguments) 는 함수를 호출할때 건네주는 변수
  • 매개변수에 몇 개인지 정해지지 않은 인수를 받고 싶으면 보통 " *args "를 사용. (ARGumentS)
  • 딕셔너리 형태로 받는 것도 가능. 보통 " **kwargs "를 사용.(KeyWord ARGumentS)
def add(a,b): # add 함수를 정의한다.
    result = a+b # a와 b를 더한 값을 result에 넣는다.
    return result # a와 b를 더한 값을 반환한다.
print(add(3,4)) # add(3,4)를 출력한다. 결과값 : 7

def say(): # say 함수를 정의한다.
    return 'Hi' # Hi를 반환한다.
print(say()) # say()를 출력한다. 결과값 : Hi

def add_or_mul(choice, *args): # add_or_mul 함수를 정의한다.
    result = 0 # result 변수에 0을 넣는다.
    if choice == "add": # choice가 add이면
        for i in args: # args를 i에 넣는다.
            result += i # result에 i를 더한다.
        return result # result를 반환한다.
    if choice == "mul": # choice가 mul이면
        result = 1 # result 변수에 1을 넣는다.
        for i in args: # args를 i에 넣는다.
            result *= i # result에 i를 곱한다.
        return result # result를 반환한다.

print("add or mul?") # add or mul? 출력
inputNumber = add_or_mul(input(), 1,2,3) 
# add_many에 input과 1,2,3을 넣어 inputNumber에 넣는다.
print(inputNumber) # inputNumber를 출력한다.

def keyWord_args(**kwargs): # keyWord_args 함수를 정의한다.
    print(kwargs) # kwargs를 출력한다.
    print(kwargs['b']) # kwargs['b']를 출력한다. 결과값 : 2
    # 리턴값이 없으므로 None이 출력된다.

result = keyWord_args(a=1, b=2) 
# keyWord_args에 a=1, b=2를 넣어 result에 넣는다.
print(result) # result를 출력한다.

def add_and_mul(a,b): # add_and_mul 함수를 정의한다.
    return a+b , a*b # a+b와 a*b를 반환한다.(튜플)
a, b = add_and_mul(3,4) # add_and_mul(3,4)를 a,b에 넣는다.
print(a) # a를 출력한다. 결과값 : 7
print(b) # b를 출력한다. 결과값 : 12

def say_nick(nick): # say_nick 함수를 정의한다.
    if nick == "바보": # nick이 바보이면
        return # 리턴한다.
    print("나의 별명은 %s 입니다." % nick) # 나의 별명은 nick 입니다. 출력

say_nick("과자") # say_nick("과자")를 출력한다. 결과값 : 나의 별명은 과자 입니다.
say_nick("바보") # say_nick("바보")를 출력한다. 결과값 : (출력 없음)

def say_myself(name, old, man=True): # say_myself 함수를 정의한다.
# 초기값을 설정할 때는 항상 뒤에 위치해야 한다.
    print("나의 이름은 %s입니다." %name) # 나의 이름은 name입니다. 출력
    print("나이는 %d살입니다" %old) # 나이는 old살입니다. 출력
    if man == True: 
        print("남자입니다.")
    else:
        print("여자입니다.")
  • 지역 변수는 함수 안에서 사용되는 변수. 단, global 예약어를 사용하면 함수 안에서 전역변수 이용 가능.
a = 1
def local_varible(a):
    a += 1
    return a
print(local_varible(a))
print(a)
a = local_varible(a)
print(a)
def global_variable():
    global a
    a += 1
    return a
global_variable()
print(a)

b = [1,2,3]
def appendList(b): # b를 받아서
    b = b.append(4) # b에 4를 추가한다.
    # b.append(4)는 b에 4를 추가하는 것이지,
    # b에 4를 추가한 리스트를 반환하는 것이 아니다.
appendList(b) # appendList(b)를 실행한다.
# 즉 b(지역변수)에는 [1,2,3,4]가 들어가야 하는데
# b(지역변수)에는 None이 들어가게 된다.
# 이는 b.append(4)가 반환값이 없기 때문이다.
# 하지만 b(전역변수)에는 [1,2,3,4]가 들어가게 된다.
print(b) # b를 출력한다. 결과값 : [1,2,3,4]
  • lambda 람다 정의는 한 줄로 정의할 수 있고, 함수 이름을 정하지 않아도 가능.
  • 실제로 간단하게 정의할 경우 쓰이는 기능.
a = [lambda a,b : a+b , lambda a,b : a*b , lambda a,b : a-b]
# a에 람다함수를 넣는다.
# a[0]은 a+b를 반환한다.
# a[1]은 a*b를 반환한다.
# a[2]은 a-b를 반환한다.
print(a[0](3,4) , a[1](3,4) , a[2](3,4))
# a[0](3,4)은 3+4를 반환한다.
# a[1](3,4)은 3*4를 반환한다.
# a[2](3,4)은 3-4를 반환한다.

 

2) input 입력

  • input() 으로 사용자의 입력을 받을 수 있음
  • input("여기에 입력 : ") 이라는 식으로, 파라미터에 인풋에 대한 설명을 기입 가능.
  • input값은 기본적으로 string 타입이기 때문에, 자료형 변환이 필요할 수 있음.
a = input() # input을 a에 넣는다.
print(a, type(a)) # a와 a의 타입을 출력한다.
b = int(a) + 1 # a를 int로 바꾸고 1을 더한다.
print(b, type(a), type(b)) # b와 a의 타입, b의 타입을 출력한다.

 

3) 파일 읽고 쓰기

  • 파일_객체 = open(파일_이름, 파일_열기_모드) 형태로 사용.
  • 열기 모드에는 r(읽기) w(쓰기) a(추가) 가 있다.
  • 쓰기 모드는 이미 존재하는 파일이면 파일 내용을 삭제한 후 새로 쓰고, 파일이 존재하지 않으면 파일을 생성한다.
  • 파일은 명령이 실행되는 현재 디렉터리에 추가된다.
  • "파일_이름"에 디렉터리를 포함하면 해당 디렉터리에 파일이 추가된다.
  • 파일_객체.close() 로 파일을 닫아줄 수 있다.
  • 한글로 된 내용을 파일에 추가했을 때, Visual Studio Code 내에서 해당 파일을 봤을 때 글자가 깨진다면 인코딩을 추가해줘야 한다.
f = open("open_test/test.txt", 'w', encoding='utf-8')
# open_test/test.txt를 쓰기모드로 열어 f에 넣는다.
# 글자 깨짐을 방지하기 위해 utf-8로 인코딩한다.
for i in range (1,10):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

 

  • 읽기 모드에서 읽는 방법은 readline() 혹은 readlines()를 사용할 수 있다.
f = open("open_test/test.txt", 'r', encoding='utf-8')
line = f.readline()
print(line)
f.close()
# open_test/test.txt를 읽기모드로 열어 f에 넣는다.
# 한 줄을 읽어 line에 넣는다.
# line을 출력한다.

f = open("open_test/test.txt", 'r', encoding='utf-8')
while True:
    line = f.readline()
    if not line: break
    print(line, end = '')
f.close()
# open_test/test.txt를 읽기모드로 열어 f에 넣는다.
# 무한 반복문을 돌린다.
# 한 줄을 읽어 line에 넣는다.
# 반복해서 읽다가 더 이상 읽을 줄이 없으면 반복문을 종료한다.

f = open("open_test/test.txt", 'r', encoding='utf-8')
lines = f.readlines()
for line in lines:
    line = line.strip()
    # strip()은 문자열의 양 끝에 있는 공백과 \n을 제거한다.
    # 혹은 line = line.replace("\n", "") 으로도 가능하다.
    print(line)
f.close()
# open_test/test.txt를 읽기모드로 열어 f에 넣는다.
# 모든 줄을 읽어 lines에 넣는다.
# readlines()는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 반환한다.
# lines를 출력한다.
  • 새로운 내용을 추가할 땐 'a' 모드를 사용해야 한다. 'w' 모드를 사용하면 기존 내용이 삭제되기 때문에.
  • with를 사용하면 close()를 자동으로 해준다.
with open("open_test/test.txt", "a", encoding='utf-8') as f:
    f.write("추가된 줄입니다.")
# open_test/test.txt를 추가모드로 열어 f에 넣는다.
# 추가모드는 파일의 마지막에 새로운 내용을 추가할 때 사용한다.
# with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close된다.

 

4) 프로그램 입출력

  • 해당 기능을 이용하기 위해선 "import sys"로 모듈을 임포트 해야한다.
import sys

sum = 0
args = sys.argv[1:]
for i in args:
    sum = int(i) + sum
print(sum)
# sys.argv는 명령 행에서 인수를 전달하는 리스트이다.
# sys.argv[0]은 파일 이름이다.
# sys.argv[1]부터는 인수이다.

 

2. 오늘의 정리

중요한 건 명령어를 외우는 것보다, 저 흐름을 보고 이해할 수 있는 것과, 그리고 내가 그걸 생각해 낼 수 있는 것이라 생각한다. 해답을 보면 "아~ 그렇지!!" 하게 되지만, 막상 백지에서 이걸 만들어봐~ 하면 잉.. 어디부터 해야되지.. 하면서 내 머리가 백지가 된다.

보면서 익숙해지면 점점 그런 경우가 적어질 것이라 믿는다!

'bootcamp' 카테고리의 다른 글

[SSAFY] 1주차 회고  (1) 2025.01.12
250101 점프 투 파이썬 (5)  (2) 2025.01.01
241230 점프 투 파이썬 (3)  (1) 2024.12.30
241230 점프 투 파이썬 (2)  (1) 2024.12.30
241229 점프 투 파이썬 (1)  (0) 2024.12.30