본문 바로가기
언어/Python

[유튜브 나도코딩 1분파이썬] 100분완성 강의 요약본 #42강~46강

by 바다의 공간 2024. 5. 11.

[42강. 가변인자 ]

가변인자는 말 그대로 개수가 바뀔 수 있는 인자입니다.

이 함수를 호출할 때 전달값이 몇개가될지 모르는 경우에 개수를 신경 쓸 필요 없이 함수를 쓸 수있게 해주는것이다.

 

가변인자를 쓰는법 : 전달값앞에 * 찍어주면 됩니다. ▶ *전달값

 

def visit(today, customer1, customer2, customer3, customer4, customer5):

여기서 몇개의 전달값을 만들어야할지 고민하던 함수를

def visit(today, *customers):

이렇게 *customers라는 변수로깔끔하게 줄여버리면 됩니다.

참고로 *customerss튜플형태로 값들을 받게 됩니다.

예시

def visit(today, *customers):

    print(today) #날짜출력

    for customoer in customers:

        print(customer) #고객 이름 출력

 

이렇게 가변인자를 사용하게되면

visit('2024년 6월 10일', '나장발') #1명방문

visit('2024년 6월 10일', '나장발','나수영') #2명방문

visit('2024년 6월 10일', '나장발','나수영','나김리') #3명방문

고객의 수가 1명,2명,3명이 됐건 상관없이 이 함수를 똑같이 사용할 수 있게 됩니다.

이렇게 실행하게 되면 

1명일때는 

나장발

 

2명일때는

나장발

나수영

이런식으로 실행하게 됩니다.

단 주의해야할 점이 있습니다.

함수의 전달값이 여러개가 있다고 할 때 가변인자는 마지막에 딱 한 번만 쓸 수 있습니다.

예를들어서

def my_function(a,*b, *c): #가변인자를 b와 c에 넣는다고 가정하면
my_function(1,2,3,4,5,6) # 1=a로 되겠지만 나머지 2,3,4,5,6의 전달값들은 몇개씩 끊어서 b와 c에 넣어야할지 알수가 없다!

[43강. 지역변수 ]

def secret():

    message = '이건 나만의 비밀'

 

print(message) 를 출력하면 값이 나올까요 안 나올까요?

안나옵니다. 에러가 나면서 메시지라는 변수가 정의되어있지않다고 나오면서 에러가 납니다.

message변수는 지역변수이기 때문입니다.

 

지역변수란?

함수 내에서 정의된 변수

함수 내에서만 사용 가능

합니다.

 

def secret():    
    message = '이건 나만의 비밀' #secret 함수 내에서의 정의
    print(message) #값 출력 가능
    message = '함수 내에서는 자유롭게 수정이 가능해요'
def please():
    print(mesage) #절대안됨
print(message)  #절대안됨

안되는 이유는 같은함수가 아니라서 입니다.

 

[44강. 전역변수 ]

전역변수는 함수 밖에서도 사용가능한 즉 어디서든 사용 가능한'전역변수'라는 것도 있습니다.

사용방법은 그냥 함수 밖에서 만들면 그것이 바로 전역변수입니다.

 

message = '나는야 전역변수'

 

print(message)

 

def no_secret():

    print(message) #'나는야 전역 변수'가 출력 됨

 

def no_secret():

    message = '이러면 또 지역 변수'

    print(message) # no_secret함수 내의 지역 변수로 새로 만들어져서  '이러면 또 지역 변수'가 출력 됨

 

def no_secret():

    global message #전역 변수 사용하겠음. 없으면 여기서 만들겠음

    message = '이러면 또 지역 변수'

    print(message) # no_secret함수 내의 지역 변수로 새로 만들어져서  '이러면 또 지역 변수'가 출력 됨

 

global message를 만드는 이유 

함수 내에서 전역 변수의 값을 사용만 할때는 상관이 없지만 값을 수정하려고 할 때 사용합니다.

이렇게하면 전역공간의 값을 사용하게되고 만약 전역공간의 변수가 없다면 message라는 이름이 전역변수를 만들게 됩니다.

message = '나는야 전역 변수'

print(message)

def no_secret():
    global message
    message = '오! 진짜 전역 변수!!' #전역 변수 값 변경

no_secret()
print(message)를 실행해보면 아래처럼 출력되는것을 확인할 수 있습니다.

전역변수와 지역변수의 차이를 잘 기억해두어야합니다.

 

[45. 사용자입력]

지금까지 입력하고 만든 프로그램은 스피커를 사용해서 흘러나오는 방송처럼 일방적이었습니다.

작성한대로 그저 흘러갈뿐이었습니다. 그렇지만 프로그래밍을 할때는 직접 입력해야하는 것들이 잇는데

그 함수는 inpit입니다. input함수를 사용해서 사용자 입력을 받을 수 있습니다.

 

input 사용방법

input('입력값을 넣으세요')

예를 들면

버거 식당 직원이  "예약자분 성함이 어떻게 되나요?" 라고 물어보고 싶다면 코드는 아래와 같이 작성되게 됩니다.

<코드>

name = input('예약자분 성함이 어떻게 되나요?')

print(name)

# 예약자분 성함이 어떻게 되나요? 라고 나오게 됩니다.

'나도코딩' 이라고 적고 엔터를 치면 아래처럼 나오게 됩니다.

그러면 사용자가 값을 입력할때까지 기다렸다가 입력된 값을 name변수에 넣고 다음 문장을 실행하게 됩니다.

 

예약한사람이 몇명인지 물어볼수도 있습니다. 식당은 예약을  최대 4명까지만 가능하다는 가정하에 코드작성할게요

num = input('총 몇분이세요?')

if num > 4:

    print('죄송하지만 저희 식당은 최대 4분까지만 예약 가능합니다')

 

여기서 8이라고 입력하게되면 error가발생합니다. TypeError: '>' not supported between instances of 'str' and 'int'

그 이유는 4는 int인데 우리가 입력 받은 num은 str이라서 입니다.

input으로 받은 사용자 입력값은 모두 문자열 형태라서 숫자4도 '4'로 문자열로 저장되어서 그런겁니다.

이럴때는 형변환을 통해서 

 

num = int(input('총 몇분이세요?')

 

if num > 4:

    print('죄송하지만 저희 식당은 4명까지만 예약가능해요')

[46. 파일 입출력]

말 그대로 파일에 대한 내용을 입력하고 출력하는 것을 의미합니다.

사용방법은

open(파일명, 열기모드, encoding='인코딩')

<열기모드>

r : read (읽기)

a : append(이어서쓰기)

w : write(쓰기)

 

예를들 작성해보면

1. 파일쓰기

f = open('list.txt', 'w', encoding='utf8') #쓰기모드로 파일열기

코드해석은

list.txt라는 파일을 여는데 w(쓰기모드)로 파일을 열는거고 한글을 쓰기위해서 uft8을 적습니다.

 

현재경로에 list.txt파일이 있다면 덮어쓰기 없다면 새로 만들어서 파일을열게 됩니다.

이제 이 f를 통해서 파일에 어떤 내용을 쓸 수 있는 겁니다.

 

f = open('list.txt', 'w', encoding='utf8')

f.write('김xx\n') #문장입력하기 \n은 문장을 구별하기 위해서 줄바꿈기능을 합니다.

f.write('정xx\n') #문장입력하기

f.write('허xx\n') #문장입력하기

f.close() #파일을 닫아준것. 파일을 열었으면 꼭 닫아주어야합니다.

 

2. 파일 읽기

f = open('list.txt', 'r', encoding='utf8') #읽기모드로 파일열기

contents = f.read() #파일 내용 다 읽어오기

print(contents)

f.close() 

 

만약 파일을 한 줄씩 읽어와서 뭔가 처리하고 싶은것이 있다면 for반복문을 이용해서 해줄 수 있습니다.

f = open('list.txt', 'r', encoding='utf8') 

for line in f :

    print(line, end='')

f.close()