□
def is_odd(number):
if number % 2 ==1:
return True
else:
return False
is_odd(3)
True
def say():
print('Hi')
say()
Hi
작성자: 장지운
작성일:3/27
진도: 3-1 if문 (조코딩 1:41:46~ 1:50:26)
a. if문은 왜 필요할까?
b. if문의 기본 구조
c. 조건문이란 무엇인가?
d. 비교 연산자
작성자 : 류서현
작성일 : 3 / 24
진 도 : 3-1 if 조건문
■ 조건문 이란?
"조건문" 이란 참과 거짓을 판단하는 문장을 말한다.
예를 들어
위 와 같이 작성된 코드는 x>y의 조건문이 참이기 때문에 True를 출력하게 된다.
■ if 조건문
이러한 조건문을 if 와 함께 사용하면 이 전 주제인 택시 예제를 다음과 같이 바꿀 수 있다.
위의 코드는 money가 3000원 이상 있을때에만 택시를 타라고 하는 조건이 있기 때문에, 2000원 만을 가지고 있을 시에는 '걸어가라' 가 출력 되게 되어있다.
■ and / or / not
조건문의 진위 여부를 가리기 위해서 and, or, not 세가지의 연산자가 있다 각각의 연산자는 다음처럼 동작한다.
1) X or Y : X 와 Y 둘중에 하나만 참이어도 참이다.
2) X and Y : X 와 Y 모두 참이어야 참이다.
3) not X : X 가 거짓이면 참이다.
이러한 연산자의 특징을 이용하면 위의 코드를 다음과 같이 재구성할 수 있다.
위 코드는 현금은 조건문을 만족하지 못하지만, card의 값이 True 이므로 '택시를 타라' 가 출력되게 된다. 만약 card의 값이 False였다면 그대로 '걸어가라' 가 출력되게 된다.
■ in / not in
in, not in 은 다른 형태의 조건문을 구성하게 해준다. 그 예시는 다음과 같다.
위의 예시는 1이라는 값이 리스트 [1,2,3] 안에 있는가? 라는 조건문에 대한 대답이라고 할 수 있고, 그 밑의 예시는 같은 리스트 안에 1이 없는가? 라는 조건문에 대한 대답이다. 택시 예제에 in 을 적용하면 다음과 같다.
■ elif 조건문
우리가 코드를 작성할때에 if 와 else만으로는 다양한 조건을 판단하기 어렵다. 그럴때에 사용하는 조건문이 바로 elif이다.
elif는 이전 조건문이 거짓일 때 수행되며 사용 횟수에 제한이 없는 것이 특징이다.
다음과 같이 elif는 이전 조건문이 거짓일 때 수행된다.
■ 조건부 표현식
조건부 표현식을 사용하면, 긴 if 조건식을 간단하게 표현할 수 있다.
작성자 : 조현우
작성일 : 2022 03 26
진도 :
while문의 기본구조
while문 만들기
while문 강제로 빠져나가기
while문의 맨처음으로 돌아가기
무한루프
while문의 기본구조
문장을 반복적으로 수행할 경우 while문을 사용한다. 그래서 반복문이라고도 부른다.
while <조건문>:
<수행문장1>
<수행문장2>
<수행문장3>
...
while문은 조건문이 참일 동안 아래 문장을 계속 수행한다.
While문 만들기
예시-나무베기
treehit = 0
while treehit < 10:
treehit = treehit+1
print("나무를 %d번 찍었습니다" % treehit)
if treehit == 10:
print("나무 넘어갑니다")
위 코드의 while문의 조건문은 treeHit<10이기 때문에 treehHit가 9일 때까지는 while문을 계속 반복한다. 그리고 다음, +1이 되어 treeHit가 10이 되면 "나무 넘어갑니다"를 출력하고 조건문에 대해 거짓이 되므로 while문을 빠져나옵니다.
While문 강제로 빠져나가기
조건문이 참인 동안 while문 안의 내용을 계속 반복하지만 이따금씩 while문을 빠져나가고 싶을 때가 있다. break문을 커피판매에 사용해보자
예시2-커피판매
coffee = 10
while True:
money = int(input("돈을 넣어주세요: "))
if money == 300:
print("커피를 줍니다")
coffee -= 1
elif money > 300:
print('거스름돈 %d를 주고 커피를 줍니다' %(money - 300))
coffee -= 1
else:
print('커피를 주지 않고 돈도 다시 돌려줍니다')
print('남은 커피의 양은 %d개 입니다'%coffee)
if coffee == 0:
print('커피가 다 떨어졌습니다. 판매를 중지합니다.')
break
커피가 모두 떨어지기 전까지는 while문이 계속되어야하므로 break가 걸리지 않는 이상 True를 통해 반복되도록 한다. money=300이면 커피 -1을 하고 money>300이면 커피 -1을 한 후 money-300을 출력하고 money<300일 경우 남은 커피의 양을 출력하도록 하였다. 그리고 커피를 모두 판매해 커피개수가 0이 되면 break를 통해 while문을 탈출하고 판매중지를 출력하도록 했다
While문 맨 처음으로 돌아가기
while문을 반복하다가 어느 조건에서 반복을 중지하고 맨처음을 돌아갈 때 continue를 사용한다. 10이하의 홀수를 출력하도록 하는 코드를 통해 알아보자
예시3- 홀수출력
a = 0
while a < 10:
a += 1
if a%2 == 0:
continue
print(a)
0에서 1씩 더학다가 짝수가 될 경우 while문의 처음으로 돌아가 다시 1을 더하기 때문에 홀수만 출력된다.
무한루프
무한루프는 말 그대로 무한히 반복한다. 무한루프의 기본형태를 살펴보자
while True:
수행할 문장1
수행할 문장2
...
while문은 조건문이 Treu라 항상 참이 되기 때문에 내부 문장들이 무한히 수행된다.
무한루프의 예시를 살펴보자
while True:
print("Crtl+C를 눌러서 무한루프를 탈출할 수 있어용")
crtl + c를 누르기 전까지는 문장이 계속 반복된다.
연습문제풀이
1. 1~1000까지의 자연수 중 3의 배수의 합을 구하여라
a = 0
b = 0
while a <= 1000:
a += 1
if a%3 == 0:
b = b+a
print(b)
2. while문을 사용해 다음을 나타내 보자
*
**
***
****
*****
a = '*'
b = 0
while b <= 5:
b += 1
c = b*a
print(c)
느낀점
파이썬을 배워본 적이 없었는데 이렇게 체계적으로 공부하니 천천히 쌓아가는 재미가 있었습니다.
작성자 : 최연호
작성일 : 2022.03.27
진도 :
for문의 기본 구조
for문 이해하기
- 다양한 for문의 사용
- for문의 응용
for문과 continue
- for문의 기본 구조
리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 번째 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행된다.
- for문 이해하기
1. 전형적인 for문
[ 'one', 'two', 'three' ] 리스트의 첫 번째 요소인 'one' 이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다. 두 번째 요소 'two'가 i 변수에 대입된 후 print(i) 문장을 수행한 뒤 마지막 요소까지 동일한 과정을 반복한다.
2. 다양한 for문의 사용
위의 예시는 score 리스트 값이 튜플이기 때문에 각각 요소가 자동으로 (first, last) 변수로 대입이 가능하다.
3. for문의 응용
예시 문제:
※ 총 4명의 학생이 문제를 풀었는데 소요 시간이 30분 이하면 점수를 획득하고, 그렇지 않으면 점수를 획득하지 못한다. 점수를 획득한 학생과 획득하지 못한 학생의 결과를 보이시오.
각각 학생에게 번호를 붙이기 위해 student라는 변수를 사용하였고, 걸린 시간 리스트 times에서 번호 순서대로 점수를 꺼내어 time이라는 변수에 대입하고 for문 안의 문장들을 수행한다.
for문이 한번 수행될 때마다 student는 1씩 증가한다.(이는 학생 수를 의미함)
그리고 이 문제는 time이 30 이하일 때에 점수 획득 문구를 출력하고, 30 초과일 경우는 점수 미획득 문구를 출력한다.
- for문과 continue
앞서 3-2절에서 살펴본 while, continue문을 for문에서도 동일하게 사용할 수 있다.
예시 문제
※ 앞선 for문 응용 예제를 사용해서 문제 풀이 소요 시간이 30분 이하인 학생에겐 점수 획득 메시지를 보내고 나머지 사람에게는 아무 메시지도 보내지 않는 결과를 보이시오.
소요 시간이 30분 이하인 학생은 time < 30 이 참이 되어 continue문이 수행된다. 따라서 점수 획득 메시지를 출력하는 부분인 print문을 수행하지 않고 for문의 처음으로 돌아가게 된다.
작성자: 정규성
작성일: 2023/03/27
진도:
for문과 함께 자주 사용하는 range 함수
리스트 컴프리헨션 사용하기
-for문과 함께 자주 사용하는 range 함수
range 함수는 숫자 리스트를 자동으로 만들어준다. range(a, b)는 a부터 b-1까지의 숫자를 리스트에 넣는다.
처음 add 값은 0이고 i에 리스트의 1부터 10을 차례로 대입하고 add = add + 1을 반복하여 수행한다.
해당 예제는 60점 이상이면 합격 메세지를 출력하는 예제이다. len(marks)는 5로 for number in range(len(marks))는 사실상 for number in range(5)와 같게 될 것이다. 만약 number+1번째 숫자가 60 이상이라면 메세지가 출력될 것이다.
이 예제는 for문을 두 번 사용한 것이 눈에 띄는 예제이다. 2*1 2*2 2*3..... 2*9 3*1 3*2 ..... 와 같은 순서로 예제가 수행되어 출력된다.
-리스트 컴프리헨션(리스트 내포) 사용하기
리스트 a에 3을 곱하여 result 리스트에 추가하는 간단한 예제이다.
이 예제는 위의 예제를 '리스트 컴프리헨션'을 활용하여 더 간단히 나타낸 모습이다.
추가로 예제에 if 조건문을 사용하여 짝수에만 3을 곱하여 출력하도록 변형한 예제이다.
위의 예제에서 수행했던 구구단의 모든 값을 단순히 리스트에 넣는다면 리스트 컴프리헨션을 사용하여 더 짧고 간단하게 구현할 수 있다.
작성자 : 조현우
작성일 : 2023-03-30
진도 : 4-1 함수 : (조코딩 2:31:30 ~ 2:37:00)
a. 함수란 무엇인가?
b. 함수를 사용해야 하는 이유는 무엇일까?
c. 파이썬 함수의 구조
d. 매개변수와 인수
e. 입력값 리턴값에 따른 함수의 형태
i. 일반적인 함수
ii. 입력값이 없는 함수
iii. 리턴값이 없는 함수
iv. 입력값도 리턴값도 없는 함수
함수란 무엇인가?
함수를 생각하기 전에 밥솥을 살펴보자. 우리는 쌀을 밥솥에 넣는다. 그리고 밥솥을 이용해 맛있는 밥을 만든다. 우리가 밥솥에 넣는 쌀은 "입력"이 되고 밥은 "출력(결괏값)"이 된다. 이처럼 함수는 밥솥처럼 입력값을 가지고 어떤 일을 수행하여 결과물을 산출해낸다.
함수를 사용하는 이유는 무엇일까?
프로그래밍을 하다보면 같은 내용을 똑같이 반복하는 경우가 있는데 이럴 경우 반복되고 가치있는 부분을 한 덩어리로 뭉쳐서 함수로 작성할 경우 효율성이 증대된다. 또한 함수를 사용할 경우 흐로그래밍의 흐름을 면밀히 관찰할 수 있고 입력값이 함수를 거치며 원하는 결괏값으로 바뀌는 것을 볼 수 있으며 오류의 위치 파악도 수월해진다.
파이썬 함수의 구조
파이썬 함수의 구조는 다음과 같다.
def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
...
def라는 예약어를 통해 함수를 만들 수 있다. 함수몀은 내맘대로 할 수 있다. 함수명 뒤 매개변수는 입력값을 받는 변수이다. 파이썬 함수의 구조를 보여주는 간단한 예시를 보자.
def add(a, b):
return a + b
위 함수는 add로 정의됐고 입력값으로 a,b 2개를 받고 둘을 더한 값을 결과로 내놓는다.
return은 함수의 결괏값을 돌려주는 명령어다. 이제는 파이썬 함수 구조에 add함수를 직접 사용해보자.
def add(a,b):
return a + b
a = 3
b = 4
c = add(a, b)
print(c)
각각 a에 3, b에 4를 대입하고 입력값을 넣어준다. 미리 정의한 add함수의 결괏값으로 c를 정해주면 print(c)로 c의 값을 가질 수 있다.
매개변수와 인수
매개변수는 함수에 전달된 값을 저장하는 변수이고 인수는 함수에 전달되는 값이다.
def add(a,b): #a,b는 매개변수
return a + b
print(add(3,4)) # 3,4는 인수
입력값과 리턴값에 따른 함수의 형태
'입력값-->함수-->리턴값'이 대략적인 함수의 구조이지만 입력값과 리턴값의 존재 유무에 따라 4가지 유형에 따라 나뉜다.
일반적인 함수
일반적인 함수의 구조를 살펴보자
def 함수이름(매개변수):
<수행할 문장>
...
return 리턴값
일반적인 함수의 예시를 살펴보자
def add(a, b):
result = a + b
return result
a = add(3,4)
print(a)
위 함수는 add함수의 입력값으로 a에 3, b에 4를 받아 리턴값으로 둘은 더한 7을 출력한다.
입력값이 없는 함수
입력값이 없는 함수가 놀랍게도 존재한다. 다음을 살펴보자
def say():
return 'Hi'
say라는 함수를 만들었는데 어떻게 사용하는지 감이 안온다. 다음 예시를 살펴보자
def say():
return 'Hi'
a = say()
print(a)
say()괄호 안에 아무것도 넣지 않는다. 그러므로 입력값은 없지만 "Hi"라는 결괏값을 리턴한다. 즉 a=say()로 작성하면 a에 문자열 'Hi'가 대입된다.
리턴값이 없는 함수
입력값이 없는 함수가 있듯이 리턴값(결괏값)이 없는 함수도 있다. 다음 예시를 살펴보자.
def add(a,b):
print("%d, %d의 합은 %d입니다." %(a, b, a+b))
add(3,4)
리턴값이 없기 때문에 위처럼 사용된다. 출력값으로는 '3,4의 합은 7입니다.'로 나온다.
리턴값이 없는 지 확인하기 위해 다음 예시를 살펴보자.
def add(a,b):
print("%d, %d의 합은 %d입니다." %(a, b, a+b))
a = add(3,4)
위 함수의 결괏값 또한 '3,4의 합은 7입니다.'로 나온다. 하지만 왜 리턴값이 없는 지 궁금할 것이고 나도 궁금했다. print문은 함수의 구성 요소 중 하나인 <수행할 문장>에 해당하는 부분일 뿐이다. 리턴값은 오직 return 명령어로만 돌려받을 수 있기 때문에 리턴값은 없다.
이제 리턴값이 있는지 없는지 '진짜' 확인해보자
def add(a,b):
print("%d, %d의 합은 %d입니다." %(a, b, a+b))
a = add(3,4)
print(a)
3, 4의 합은 7입니다.
None
놀랍게도 print(a)에 대해 출력된 것으로 None이 출력된다. None이 리턴됐다는 것은 리턴값이 없다는 것이다;;
입력값도 리턴값도 없는 함수
입력값도, 리턴값도 없는 함수가 존재한다. 둘다 없으면 이게 함수가 맞냐는 생각이 들 수 있지만 다음 예시를 살펴보자.
def say():
print('Hi')
위 함수는 입력 인수를 받을 매개변수도 없고 return문도 존재하지 않기 때문에 입력값, 리턴값 둘다 없는 함수이다. 위 함수를 사용하는 방법은 한가지만 존재한다.
예제
주어진 자연수가 홀수인지 짝수인지 판별해주는 함수(is_odd)를 작성해보자.
def is_odd(number):
if number % 2 ==1:
return True
else:
return False
is_odd(3)
True
다음과 같이, 점수를 입력 받아 학점을 출력하시오.
90 점 이상 ~ 100점 이하 : A
80 점 이상 ~ 90점 미만 : B
70 점 이상 ~ 80점 미만 : C
60 점 이상 ~ 70점 미만 : D
60 점 미만 : F
단, 함수형 문제이므로 함수 grade()만 작성하여 제출하시오.
def grade(score):
if score >=90 and score<=100:
return 'A'
elif score>=80:
return 'B'
elif score >= 70:
return 'C'
elif score >= 60:
return 'D'
else:
return 'F'
grade(66)
'D'
느낀점
함수에 대해 배우는 이유가 '가치있는 반복되는 부분'을 효율적으로 사용하기 위해서라는 것이 인상깊었다. 함수는 입력값과 출력값이 모두 존재해야 하는 것으로 알고 있었는데, 입력값이나 출력값이 없는 함수도 존재한다는 것을 공부하는 과정에서 알 수 있어서 좋았다.
작성자 : 류서현
작성일 : 3/30
진 도 : 4-1 함수: (조코딩 2:37:01 ~ 2:46:05)
■ 매개변수 지정하여 호출하기
파이썬에서 함수란 반복적인 작업을 보다 효율적으로 할 수 있게 하기 위해서 우리가 직접 설정하는 것이다. 이렇게 우리가 함수를 설정하는 과정에서 매개변수를 사용하였는데, 이번에는 우리가 직접 매개변수를 지정하여 호출하는 방법에 대해서 알아볼 것이다. 매개변수를 우리가 직접 지정하여 사용하면 순서에 상관없이 이용할 수 있다는 장점이 있다.
위에서와 같이 result2의 경우에는 b와 a의 순서가 반대로 되어 있지만 우리가 직접 매개변수를 지정했기 때문에 순서를 신경쓰지 않고 함수를 사용할 수 있다.
■ 입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?
입력값이 여러 개일 때 그 입력값을 모두 더해 주는 함수를 생각해 보자. 하지만 여기서 입력값이 몇개인지 모른다면 다음과 같은 매개변수를 사용하게 되어 있다.
*args 처럼 매개변수 앞에 *를 붙이게 되면 그 입력값들을 전부 모아서 튜플로 만들어 준다. 밑에서 처럼 1,2,3,4,를 함수에 넣으면 args는 저절로 (1,2,3,4)라는 튜플이 된다. 이렇게 받은 입력값들을 for 반복문을 통해서 게산을 반복하게 해준다면 여러개의 입력값을 받는 함수를 만들 수 있다.
덧셈뿐이 아니라 이렇게 곱셈과 같은 형태도 충분히 표시할 수 있다.
■ 키워드 매개변수 kwargs
키워드 매개변수를 사용할 때는 매개변수 앞에 별 두개 (**)를 붙인다.
함수의 입력값으로 a=1이 사용되면 kwargs는 {'a' =1}이라는 딕셔너리가 되고 name = 'foo', age=3이 사용되면 kwargs 는 {'age': 3, 'name': 'foo'}라는 딕셔너리가 된다. 즉 키워드 매개변수를 사용하게 되면 매개변수는 딕셔너리가 된다는 것을 알 수 있다.
■ 함수의 리턴값은 언제나 하나이다
위와 같이 코드를 구성하면 result는 (7,12)가 나오게 된다. 이는 함수의 리턴값이 언제나 하나라는 것에 있는데 result가 하나만 쓰였으므로 add_and_mul의 함숫값은 하나의 튜플 값인 (a+b, a*b)로 리턴되는 것이다. 만약 이 튜플을 분리하고자 한다면 result를 다음 과 같이 한개 더 불러오면 된다.
하지만 이러한 성격때문에 함수는 return을 만나는 순간 그 계산을 마치고 함수를 빠져나가게 된다. 즉 가장 위의 예시처럼 하나의 return에 계산을 적어야 하지, return을 위 아래로 두번 적게 되면 위의 return 계산만 마치고 함수는 끝이 나게 된다.
■ 매개변수에 초깃값 미리 설정하기
위의 예시에는 name age man이라는 3가지의 매개변수가 있다. 하지만 여기서 특이한 것이 있는데 바로 man이라는 매개변수에 이미 True로 초깃값이 설정되어 있다는 것이다. 이러한 경우에는 say_myself라는 함수에 값을 지정할때 가장 마지막 매개변수인 man에 해당되는 정보를 투입하지 않더라도 기본적으로 초깃값인 True를 갖게 된다. 하지만 반대로 say_myself의 마지막 함숫값으로 False를 작성하게 되면 마지막 man이라는 매개변수의 값이 False가 되어 "여자입니다"가 출력되게 된다. 이러한 매개변수의 초기설정에는 신경 써야할 중요한 사항이 하나 있다.
위와 같이 man=True의 값을 중간에 넣고 age 함숫값을 마지막에 넣게 되면 우리가 직접 입력한 22라는 값의 위치를 컴퓨터는 판단하지 못하게 된다. 그러므로 초깃값이 있는 매개변수를 사용할 때에는 가장 마지막에 위치하도록 하는것이 중요하다.
작성자 : 장지운
작성일 : 4/2
진 도 : 4-1 함수, 4-2 사용자 입력과 출력 (조코딩: 2:46:06 ~2:56:43)
a. 함수 안에서 선언한 변수의 효력 범위
b. 함수 안에서 함수 밖의 변수를 변경하는 방법
c. lambda
d. 사용자 입력
i. input의 사용
ii. 프롬프트 띄워서 사용자 입력 받기
e. print 자세히 알기
- 큰 따옴(”)로 둘러쌓 문자열은 +연산과 동일하다
- 문자열 띄어쓰기는 콤마로 한다
- 한 줄에 결괏값 출력하기
■ 함수 안에서 선언한 변수의 효력 범위
한줄 요약: 함수 안에서 새로 만든 매개변수는 함수 안에서만 사용하는 "함수만의 변수"이다
a=1
def factor(a):
a=a+1
factor(a)
print(a)
-------
1
즉 함수 'def factor(a)'에서 입력 값을 전달 받는 a는 'def factor(a)'라는 함수 안에서만의 a이다. 함수 밖의 변수 'a'와는 별개이기에 위와 같은 출력 값이 나온다.
■ 함수 안에서 함수 밖의 변수를 변경하는 방법
두 가지 방법이 있다
▷ return
a=1
def factor(a):
a=a+1
return a
b=a
a=factor(a)
print(a)
print(b)
--------------
2
1
return은 def factor(a)라는 출력 값에 영향을 주지 않는 local 함수를 global로 전환 시킨다. 그러므로 기존 a 값을 factor(a)로 정의 하였을 때는 2가 출력된다.
함수 b에 기존 a 값을 저장하고 출력을 했을 때 결괏값이 1이다. 이는 return 함수는 a의 값에 직접적으로 영향을 주지는 않는다는 뜻이다.
▷ global
a=1
def vartest():
global a
a=a+1
vartest()
print(a)
-----------
2
함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻이다. 이럴 경우 함수 내부의 함수가 외부 변수에 종속적이게 되어 그다지 좋지 않다.
되도록이면 첫 번째 방법을 사용하는 것을 권장한다.
■ lambda
예약어로 def와 동일한 역할을 한다. 보통 함수를 한줄로 간결하게 만들 때 사용. def를 사용해야 할 정도로 복잡하지 않거나 def를 사용 할 수 없는 곳에 쓰인다.
add = lambda a,b:a+b
result= add(3,4)
print(result)
---------------------
7
add는 두 개의 인수를 받아 서로 더한 값을 돌려주는 lambda 함수이다. *return 필요 없음
def add(a,b):
return a+b
result = add(3,4)
print(result)
------------------
7
■ 사용자 입력
사용자가 입력한 값을 어떤 변수에 대입하고 싶을 때 --> input()
괄호 안에 안내 문구 등을 작성 할 수 있다
*input은 입력되는 모든 것을 문자열로 취급한다
■ print 자세히 알기
-큰따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다
-콤마(,)를 사용하면 문자열 사이에 띄어쓰기를 한다
-한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end를 사용해 끝 문자를 지정해야 한다.
for a in range(10):
print(a,end='')
------------------
0123456789
작성자 : 최연호
작성일 : 4/3
진 도 : 4-3 파일 읽고 쓰기 : (조코딩 : 2:56:43~ 3:03:30)
a. 파일 생성하기
b. 파일을 쓰기 모드로 열어 내용 쓰기
c. 파일을 읽는 여러 가지 방법
d. readline 함수 사용하기
- 파일 생성하기
해당 코드를 입력하게 될 경우 디렉터리에 새로운 파일이 생기게 된다. 파일 생성을 위해 open 함수를 사용하였고, 위의 "새파일.txt" 은 파일명, 'w' 는 파일 열기 모드를 입력값으로 하고 결과값으로 파일 객체를 나타낸다.
(txt - 텍스트 파일을 의미)
파일 열기 모드 | 설명 |
r | 읽기 모드- 파일을 읽기만 할 때 사용하는 코드 |
w | 쓰기 모드- 파일에 내용을 쓸 때 사용 |
a | 추가 모드- 파일의 마지막에 새로운 내용을 추가할 때 사용 |
- 파일을 쓰기 모드로 열어 내용 쓰기
위의 두 코드는 결과값이 유사하게 나오지만, data를 출력하는 방법이 상이하다고 할 수 있다. 왼쪽 함수는 새파일.txt 라는 파일 내에서 데이터를 적게끔 하는 방법이고, 오른쪽 함수는 기존 함수와 같이 실행할 경우 모니터 화면에 데이터가 바로 출력되는 방법이라는 점에서 차이가 있다.
☆ 왼쪽은 텍스트 파일에서 새로운 데이터를 출력하기에 줄바꿈 문자 \n 이 있어도 줄바꿈이 발생하지 않지만, 오른쪽의 print 함수는 모니터에서 바로 출력되기 때문에 \n 을 인식하여 줄바꿈이 일어난 상태로 데이터가 출력된다.
- 파일을 읽는 여러가지 방법
1. readline 함수
위에서 생성한 새파일.txt 라는 파일을 읽기 모드 r 을 사용하여 연 후 readline 함수를 사용하여 해당 파일의 첫번째 줄이 모니터에 출력되도록 한 예시이다.
- 새파일.txt 파일을 수정하지 않았다면 해당 파일의 가장 첫번째 줄이 모니터에 출력된다.
모든 줄을 화면에 출력하고 싶을 때
위의 예시처럼 첫번째 줄이 아닌 모든 줄을 모니터에 출력하고 싶다면 while True: 문을 이용하여 파일을 계속해서 읽어들이고, 파일의 마지막 줄을 읽고 리턴하기 위해 break를 수행한다. 무한 루프를 사용한 후 break를 수행하면 readline 함수는 더 이상 읽을 문자열이 없기에 빈 문자열을 리턴하여 데이터를 출력한다.
아래의 또다른 while True 코드는 입력을 받는 방식만 다를 뿐, 출력하는 데이터는 동일함을 확인할 수 있다.
위의 open 함수는 파일을 읽어서 출력하고, 아래의 print 함수는 키보드를 사용하여 데이터를 읽는 입력 방법이다.
작성자: 정규성
작성일: 4/3
진도
4-3 파일 읽고 쓰기 : (조코딩 : 3:03:31 ~ 3:08:00)
a. 파일을 읽는 여러 가지 방법
i. readlines 함수 사용하기
ii. read 함수 사용하기
iii. 파일 객체를 for문 함께 사용하기
b. 파일에 새로운 내용 추가하기
c. with문과 함께 사용하기
-파일을 읽는 여러 가지 방법
먼저 읽을 파일은 아래의 .txt 파일을 이용할 예정이다.
1. readlines 함수의 사용
readlines 함수는 파일의 모든 줄을 읽어 리스트로 전환한다.
이 때 리스트에 들어간 요소들은 모두 각 줄의 뒤에 '\n'(줄 바꿈 문자)가 붙는다. 줄 바꿈 문자를 지우기 위해서는 다음과 같은 열을 추가하면 된다.
'line = line.strip()'과 같은 strip 함수를 이용하면 줄 바꿈 문자가 제거된다.
2. read 함수의 사용
readlines 함수와는 다르게 read 함수는 곧바로 전체 문자열을 읽고 출력한다. strip 함수를 사용해 .txt 파일의 전체를 출력한 readlines 함수보다 확실히 간단하고 보기 쉬운 형태를 갖고 있다.
-파일에 새로운 내용 추가하기
쓰기 모드로 파일을 열면 파일의 내용이 모두 사라지게 된다. 그렇기에 파일에 새로운 내용을 추가하기 위해서는 추가 모드('a')를 사용한다.
위와 같이 추가 모드에서는 이미 쓰인 기존 내용 이후부터 결괏값을 추가한다.
-with문과 함께 사용하기
with문을 사용하기 전까지는 파일을 열고 close를 사용해서 파일을 닫았다. with문은 이러한 일련의 과정을 자동으로 할 수 있게 해준다.
with문을 통해서 open 이후 굳이 close를 할 필요없이 결괏값을 출력할 수 있다.