작성자: 김예원
작성일: 23/03/24
진 도: 03-1 if문
- if문은 왜 필요할까?
- if문의 기본 구조
- 들여쓰기
- 조건문이란 무엇인가? ; 비교연산자
예제 문제 (CodeUp) 풀이
03-1 if문
# if문은 왜 필요할까?
■ if문이란?
: 프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 쓰는 것
Ex) "돈이 있으면 택시를 타고, 돈이 없으면 걸어간다."
money = True
if money:
print("택시를 타고 가라")
else:
print("걸어가라")
택시를 타고 가라
money에 True를 대입했으므로 money는 참이다. 따라서 if문 다음 문장이 수행되어 '택시를 타고 가라'가 출력된다.
그렇다면 만약 money에 True 대신 False를 대입한다면 어떤 값이 출력될까?
money = False
if money:
print("택시를 타고 가라")
else:
print("걸어가라")
걸어가라
이번에는 money에 False를 대입했으므로 money는 거짓, 따라서 else문 다음 문장이 수행되어 '걸어가라'가 출력되는 것을 확인할 수 있다.
# if문의 기본 구조
if 조건문:
수행할 문장1
수행할 문장2
else:
수행할 문장A
수행할 문장B
조건문을 테스트해서 조건문이
참이면 > if문 바로 다음 문장(if 블록)들을 수행,
거짓이면 > else문 다음 문장(else 블록)들을 수행
따라서, else문은 if문 없이 독립적으로 사용 불가
# 들여쓰기
if문을 만들 때는 if 조건문: 바로 아래 문장부터 if문에 속하는 모든 문장에 들여쓰기(indentation)를 해주어야 한다.
(다른 프로그래밍 언어를 사용해 온 사람들은 파이썬에서 "수행할 문장"을 들여쓰기하는 것을 무시하는 경우가 많으니 더 주의하도록 하자.)
if 조건문:
수행할 문장1
수행할 문장2
수행할 문장3
또한 들여쓰기는 언제나 같은 깊이로 해야 한다. 다음과 같이 문장마다 들여쓰기의 깊이가 다르다면 오류가 발생한다.
if 조건문:
수행할 문장1
수행할 문장2
수행할 문장3
여기서 잠깐!
그렇다면 들여쓰기는 공백(Spacebar)으로 하는 것이 좋을까? 아니면 탭(Tab)으로 하는 것이 좋을까? 이에 대한 논란은 파이썬을 사용하는 사람들 사이에서 아직도 계속되고 있다. 그러나 요즘 파이썬 커뮤니티에서는 들여쓰기를 할 때 공백 (Spacebar) 4개를 사용하는 것을 권장한다. 또한 파이썬 에디터는 대부분 탭(Tab) 키로 들여쓰기를 하더라도 탭 문자를 공백 문자 4개로 자동 변환하는 기능을 갖추고 있다.
추가로, if 조건문 뒤에는 반드시 콜론(:)을 붙여주어야 한다! 어떤 특별한 의미가 있다기보다는 파이썬의 문법 구조이다.(이에 대해 불만이라면 직접 파이썬 창작자 귀도 반 로섬 씨에게 물어보시길.)
# 조건문이란 무엇인가? ; 비교연산자
■ 조건문이란?
: if 조건문에서 참과 거짓을 판단하는 문장
money = True
if money:
위의 예시에서 조건문은 money가 된다. money는 True이기 때문에 조건이 참이 되어 if문 다음 문장을 수행한다.
■ 비교연산자란?
: 이름 그대로 조건문에서 비교를 할 때 사용하는 연산자(<, >, ==, !=, >=, <=)
비교연산자 | 설명 |
x < y | x가 y보다 작다 |
x > y | x가 y보다 크다 |
x == y | x와 y가 같다 |
x != y | x와 y가 같지 않다 |
x >= y | x가 y보다 크거나 같다 |
x <= y | x가 y보다 작거나 같다 |
예시를 통해 비교연산자를 어떻게 사용하는지 알아보자.
"만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 그렇지 않으면 걸어가라."
money = 2000
if money >= 3000:
print("택시를 타고 가라")
else:
print("걸어가라")
걸어가라
money >= 3000 조건문이 거짓이 되기 때문에 else문 다음 문장을 수행하게 된다.
# 예제 문제 (CodeUp) 풀이
Q1.
10보다 작은 수가 입력되면 small을 출력, 10 이상이면 아무것도 출력하지 마시오.
num = int(input('number: '))
if num < 10:
print("small")
else:
pass
number: 5
small
number: 10
Q2.
예원이와 가현이는 공기 놀이로 내기를 하였다.
만약 홀수 개의 돌을 쥐게 되면 예원이가 이기게 되고, 짝수 개의 돌을 쥐게 되면 가현이가 이기는 것으로 룰을 정하였다. 어떤 자연수를 입력했을 때 홀수이면 "예원이가 이겼당"을, 짝수이면 "가현이가 이겼당"을 출력하시오.
num =int(input('How many?: '))
if num%2==1:
print("예원이가 이겼당")
else:
print("가현이가 이겼당")
'How many?': 3
예원이가 이겼당
'How many?': 4
가현이가 이겼당
CODE 스터디 2주차 활동 후기
빅데이터프로그래밍1 수업을 들으면서 혼자서는 해결하기 어려운 부분들이 있었는데, 스터디 활동을 통해 조원들과 서로 헷갈리는 부분에 대해 질문하고 답변하면서 부족한 점을 채울 수 있었다. 그리고 멘토 선배님들이 아주 든든하다. ♡
파이썬 마스터가 되는 그날까지.......... 코드 빠이팅.
작성자: 김태성
작성일: 2023.03.24
진 도:
3-1 If문
- 조건문이란 무엇인가?
- i. and, or, not
- ii. in, not in
- 다양한 조건을 판단하는 elif
- 조건부 표현식
내용 :
3-1 If문
1. 조건문이란 무엇인가?
조건문은 프로그래밍에서 특정 조건이 참인 경우에만 특정 코드 블록을 실행하거나, 거짓인 경우에 다른 코드 블록을 실행하도록 하는 구문으로, 프로그램의 흐름을 제어하는 구문입니다.
예를 들자면, 변수명 Your_age를 21이라고 설정합니다. If문을 사용하여 조건을 설정해 줍니다. 만약(if) Your_age가 21이 맞을 경우 문자열 ‘True’를 출력하고, 아닐 경우 ‘False’를 출력합니다. 여기서 프로그램이 참과 거짓을 판단합니다. If문 이외에도 더 나아가 while문, for문 등의 조건문이 있습니다.
and, or, not
If문에서의 and, or, not은 불리언(Boolean) 연산자라고 불립니다.
And
If문에서 and가 있을 경우, if문의 모든 조건문이 참일 때 참을 반환합니다. 만약 여러 조건들 중에서 하나라도 거짓이 있을 경우 if문은 거짓을 반환합니다.
위 두 예제와 같이 and는 여러 조건 중 '하나라도' 충족하지 못하는 조건이 있다면 거짓을 반환합니다.
Or
If문에서 or이 있을 경우에는 예제 2-3과 같이 다양한 조건문들 중 하나라도 참인 조건문이 있다면 참을 반환합니다. 하지만 예제 2-4와 같이 하나도 해당하지 않을 경우 거짓을 반환합니다.
Not
If문에서 not이 있을 경우에는 조건문의 결과를 부정(negate)하여 반대값을 반환합니다. 예제 2-5에서 숫자(numb)가 34이어서 조건인 35보다 작기 때문에 거짓이 나옵니다. 하지만 예제 2-6은 not 연산자가 있으므로 반대 결과를 반환하므로 참이 나옵니다.
In, Not in
‘in’과 ‘not in’ 연산자는 if문에서 사용되며, 리스트, 튜플, 문자열 등에 값이 존재하는지 여부를 확인하는데 도움을 줍니다.
In
‘in’ 연산자는 시퀀스 내에 값이 존재하면 ‘True’를 반환하고, 없을 경우 ‘False’를 반환합니다. 예제 3-1에서 볼 수 있듯이 list안에 33이라는 숫자가 있으므로 참을 반환합니다. 만약 33이 없을 경우 거짓을 반환합니다.
Not in
‘not in’의 경우 반대로 시퀀스 내에 값이 존재하지 않으면 ‘True’를 반환하고, 시퀀스 내에 값이 존재한다면 ‘False’를 반환합니다. 예제 3-2처럼 list 안에서 숫자 60을 찾아보고 없다면 참을, 있다면 거짓을 반환합니다.
2. 다양한 조건을 판단하는 elif
‘elif’는 파이썬에서 중첩 조건문을 사용할 때 쓰이며, ‘if’와 함께 사용되는 조건문의 하나입니다.
‘elif’는 else와 if가 결합한 형태이므로 ‘if’와 ‘else’와는 다르게 두 연산자(‘if’, ‘else’)의 사이에 사용됩니다. 사용되는 형태는 아래와 같습니다.
if(조건식): # 조건식이 참인 경우 실행되는 코드입니다.
elif(조건식): # 위 조건식이 거짓일 경우 실행되는 2번째 조건식입니다.
elif(조건식): #위 조건식이 거짓일 경우 실행되는 3번째 조건식입니다.
else: # 위 조건식들이 전부 거짓인 경우 실행되는 조건식입니다.
★ if문과 elif문은 필요에 따라 중첩하여 사용할 수 있으며, 더 복잡하고 정확한 조건식을 만들 수 있습니다. ★
예제를 사용한 사용 방법은 아래 예제 4-1, 2, 3에 나와있습니다.
문제: 숫자 하나를 입력받아 양수이면 “양수”, 음수이면 “음수”, 0이면 0을 출력하시오.
양수일 때:
음수일 때:
숫자가 0일 때:
3. 조건부 표현식(Conditional Expression)
조건부 표현식은 ‘if’ - ‘else’ 문을 간결하게 표현할 수 있는 방법입니다.
조건부 표현식은 간단한 ‘if’ - ‘else’ 문에서 시작하여, 복잡한 수식으로 확장될 수 있습니다. 예를 들어, 예제 5-1과 같은 ‘if’ - ‘else’ 문이 있을 때, 조건부 표현식으로 표현하자면 예제 5-2의 형태로 바꿀 수 있습니다.
일반적으로 조건부 표현식의 구조는 예제 5-1과 같습니다. 예제에서와 같이 구문에서 ‘num > 5’ 은 참 또는 거짓으로 평가되는 표현식이며, else는 조건 이 거짓일 때 평가되는 표현 식입니다.
<주의 사항>
조건부 표현식은 짧거나 간단한 경우 가독성을 높여주지만, 더 복잡하고 긴 조건문/표현식의 경우 가독성이 매우 떨어지므로 적절하게 사용하는 것이 중요합니다.
조건부 표현식 형식: result = '값 1' if 조건식 else '값 2'
CodeUp 예제 문제 (elif) |
내가 푼 예제 |
CODE 2조 2주차 활동 후기
2조가 다 같이 활동을 하며, 코딩을 하면서 몰랐던 점을 서로에게서 배우고, 또 저의 지식을 서로와 나누고 가르치면서 지식들을 완전히 저의 것으로 만들 수 있었습니다. 또한 제가 직접 코드를 짜면서 해당 예제를 만드는 것이 코드를 이해 하는데 많은 도움을 줬습니다. 모든 예제들의 난이도가 높지는 않지만, 제가 직접 코드를 쓰면서 더 깊이 이해할 수 있었습니다. 앞으로 'CODE' 동아리 과제든 미션이든 적극적으로 친구들과 사이좋게 해결해 나갈 수 있으면 좋겠습니다. 그리고 많은 도움을 준 저희 조 멘토 분들에게도 항상 너무 감사합니다!!
2조! 가야지, 가야지 코드로 가야지~!!
지금까지 코드 2조 23 김태성이었습니다.
작성자: 박은오
작성일: 23/03/25
진 도: 3-2 while문
- while문의 기본 구조
- while문 만들기
- while문 강제로 빠져나가
- while문의 맨 처음으로 돌아가기
- 무한 루프
- 예제 문제 (CodeUp) 풀이
03-2 while문
# while문의 기본구조
■ while문이란?
: 프로그래밍에서 끝이 정해지지 않고 반복해서 문장을 수행하는데 쓰는 것
그래서 while문을 반복문이라고도 부른다.
다음은 while문의 기본 구조이다.
while <조건문>:
<수행할 문장1>
<수행할 문장2>
<수행할 문장3>
...
while문은 조건문이 참인 동안에 while문에 속한 문장들이 반복해서 수행된다.
Ex) "열 번 찍어 안 넘어가는 나무 없다"
treeHit = 0
while treeHit < 10:
treeHit = treeHit +1
print("나무를 %d번 찍었습니다." % treeHit)
if treeHit == 10:
print("나무 넘어갑니다.")
위 예에서 while문의 조건문은 treeHit < 10이다.
즉, treeHit가 10보다 작은 동안에 while문에 포함된 문장들을 계속 수행하므로 끝을 모른다.
whlie문 안의 문장을 보면 제일 먼저 treeHit = treeHit + 1로 treeHit 값이 계속 1씩 증가한다.
그리고 나무를 treeHit번만큼 찍었음을 알리는 문장을 출력하고 treeHit가 10이 되면 "나무 넘어갑니다."라는 문장을 출력한다.
그러고 나면 treeHit < 10 조건문이 거짓이 되므로 while문을 빠져나가게 된다.
여기서 잠깐!
treeHit = treeHit + 1은 프로그래밍을 할 때 매우 자주 사용하는 기법이다.
treeHit 값을 1만큼씩 증가시킬 목적으로 사용하며,treeHit += 1처럼 사용해도 된다.
# while문 만들기
n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성해보자.
n=int(input())
a=0
b=0
while n>=a:
b=b+a
a=a+1
print(b)
# while문 강제로 빠져나가기
while문은 조건문이 참인 동안 계속해서 while문 안의 내용을 반복적으로 수행한다.
하지만 강제로 while문을 빠져나가고 싶을 때가 있다.이럴 때 강제로 멈추게 하는 것이 바로 break문이다.
Ex)커피 자판기
coffee = 10
money = 300
while money:
print("돈을 받았으니 커피를 줍니다.")
coffee = coffee -1
print("남은 커피의 양은 %d개입니다." % coffee)
if coffee == 0:
print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
break
자판기 안에 음료수가 충분히 있을 때에는 동전을 넣으면 음료수가 나온다.
그런데 자판기가 제대로 작동하려면 음료수가 얼마나 남았는지 항상 검사해야 한다.
만약 커피가 떨어졌다면 판매를 중단하고 "판매 중지" 문구를 사용자에게 보여주어야 한다.
money가 300으로 고정되어 있으므로 while money:에서 조건문인 money는 0이 아니기 때문에 항상 참이다.
따라서 무한히 반복되는 무한 루프를 돌게 된다.
그리고 while문의 내용을 한 번 수행할 때마다 coffee = coffee - 1에 의해서 coffee의 개수가 1개씩 줄어든다.
만약 coffee가 0이 되면 if coffee == 0: 문장에서 coffee == 0:이 참이 되므로
"커피가 다 떨어졌습니다. 판매를 중지합니다."가 수행되고 break문이 호출되어 while문을 빠져나가게 된다.
만약 break하지 않았다면 "남은 커피의 양은 (음수)개입니다"라고 계속 출력 될 것이다.
# while문의 맨 처음으로 돌아가기
while문 안의 문장을 수행할 때 입력 조건을 검사해서 조건에 맞지 않으면 while문을 빠져나간다.
그런데 프로그래밍을 하다 보면 while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다. 이때 사용하는 것이 바로 continue문이다.
Ex)1부터 10까지의 숫자 중에서 홀수만 출력
a = 0
while a < 10
a = a + 1
if a % 2 == 0: continue
print(a)
위 예는 1부터 10까지의 숫자 중 홀수만 출력하는 예이다. a가 10보다 작은 동안 a는 1만큼씩 계속 증가한다.
if a % 2 == 0(a를 2로 나누었을 때 나머지가 0인 경우)이 참이 되는 경우는 a가 짝수일 때이다.
즉 a가 짝수이면 continue 문장을 수행한다. 이 continue문은 while문의 맨 처음(조건문: a<10)으로 돌아가게 하는 명령어이다.
따라서 위 예에서 a가 짝수이면 print(a) 문장은 수행되지 않을 것이다.
# 무한 루프
이번에는 무한 루프(Loop)에 대해 알아보자. 무한 루프란 무한히 반복한다는 의미이다.
우리가 사용하는 일반 프로그램 중에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다. 그만큼 자주 사용한다는 뜻이다.
파이썬에서 무한 루프는 while문으로 구현할 수 있다. 다음은 무한 루프의 기본 형태이다.
while True:
수행할 문장1
수행할 문장2
...
while문의 조건문이 True이므로 항상 참이 된다. 따라서 while문 안에 있는 문장들은 무한하게 수행될 것이다.
Ex)무한 루프
while True:
print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
위 문장은 영원히 출력된다. 하지만 이 예처럼 아무 의미 없이 무한 루프를 돌리는 경우는 거의 없을 것이다.[Ctrl+C]를 눌러 빠져나가자.
# 예제 문제 (CodeUp) 풀이
Q1.
while문을 사용해 1부터 1000까지의 자연수 중 3의 배수의 합을 구해 보자.
a=0
b=0
while a<=1000:
if a%3 ==0:
b = b+a
a = a+1
print(b)
166833
Q2.
while문을 사용하여 다음과 같이 별(*)을 표시하는 프로그램을 작성해 보자.
*
**
***
****
*****
a='*'
b=0
while b<5:
b = b+1
print(a*b)
작성자:23이병철
작성일:03/26
진도:Jump to Python 3-3
- for문과 continue
03-3 for문
for문
- while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 쏙 들어온다는 장점이 있다.
for문의 기본구조
for 변수 in 리스트(또는 튜플,문자열):
수행할 문장1
수행할 문장2
-ex) 리스트의 모든 요소를 출력하고 싶다면 for문을 사용한다
>>>list=['one','two','three']
>>>for i in list:
print(i)
one
two
three
리스트 안의 'one','two','three' , 즉 모든 요소가 각각 i 변수에 대입된 후 print(i) 문장을 수행하였다
-ex) 리스트의 요솟값이 튜플인 경우, 튜플을 이용한 변수값에 자동으로 대입된다
>>>=[(1,2),(3,4),(5,6)]
>>>for(first,last)in a:
print(First+last)
3
7
11
(first,last) 튜플이 변수로 사용되었고 리스트의 요솟값인 튜플 (1,2),(3,4),(5,6) 들이 각각 first,last에 대입된 후 연산되어 출력된다.
for문의 응용
-ex) "한 야구훈련팀의 선수들중 타율이 0.250이 넘은 선수들을 기용, 아닌 선수들은 방출이다. 기용될 것인지 방출될 것인지 결과를 보여주시오."
#Baseball.Py
Baseball=[0.223,0.326,0.400,0.180,0.247,0.294,0.150]
number=0
for best in Baseball:
number=number+1
if best>=0.250:
print("%d번 선수는 선출입니다."%number)
else:
print("%d번 선수는 방출입니다."%number)
1번 선수는 방출입니다.
2번 선수는 선출입니다.
3번 선수는 선출입니다.
4번 선수는 방출입니다.
5번 선수는 방출입니다.
6번 선수는 선출입니다.
7번 선수는 방출입니다.
- if 문을 활용하여 'best'라는 변수가 조건으로 사용되었다. 그리고 각각의 선수에게 번호를 붙여 주기 위해 number 변수를 사용하였다.
- for문으로 선수들의 타율이 조건문을 하나하나 거쳐가도록 설정하였다.
- 타율 리스트 Baseball에서 차례로 타율을 꺼내어 bset라는 변수에 대입하고 for문 안의 문장들을 수행하는 것이다.
- 그리고 number변수를 사용하여 처음부터 끝까지의 선수들의 번호를 자동으로 붙여준다. for문이 한번씩 수행될 때마다 number가 1씩 증가하는 원리이다.
>타율이 0.250 이상일 때 선출 메시지를 출력하고 0.250을 넘지 않을 때 방출을 출력하게 된다.
for문과 continue
- while문과 비슷한 원리이므로 당연히 continue문도 for문에서 사용할 수 있다.
즉 for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.
(미안하니까 방출된 선수들에게 위로 메세지를 보내보자..)
#Baseball.Py
Baseball=[0.223,0.326,0.400,0.180,0.247,0.294,0.150]
number=0
for best in Baseball:
number=number+1
if best>=0.250:
continue
print("%d번 선수는 방출입니다. 하지만 훌룡한 잠재력을 지니셨기에 응원하겠습니다."%number)
1번 선수는 방출입니다. 하지만 훌룡한 잠재력을 지니셨기에 응원하겠습니다.
4번 선수는 방출입니다. 하지만 훌룡한 잠재력을 지니셨기에 응원하겠습니다.
6번 선수는 방출입니다. 하지만 훌룡한 잠재력을 지니셨기에 응원하겠습니다.
(야알못이라, 말도안되는 멘트와, 가정,,)
타율이 0.250이상인 선수이면 continue문이 수행된다.
2번,3번,5번 선수는 타율이 0.250이상이기에 if조건인 best>=0.250이 참이 되어 continue문이 수행된다.
따라서 print문을 수행하지 않고 for문의 처음으로 돌아가 다음요소가 수행된다.
1번,4번,6번 선수는 그리하여 위로아닌 위로의 메세지를 받게된다.
예제 문제 풀이 [code up]
Q: '영문 소문자 'q'가 입력될 때까지 입력한 문자를 계속 출력하는 프로그램을 작성해보자.'
list=['a','k','f','c','e','w','q','y','u','g','h']
for i in list:
print(i)
if i == 'q':
break
A: 예시로 q가 들어 있는 문자열의 리스트를 작성하였고 for문을 통해 모든 문자열을 출력하도록 가동시켰다.
이때 if문을 활용하여 q가나오면 q까지 출력하고 전에 배운 break를 실행하도록 설정하였다.
a
k
f
c
e
w
q
따라서 이런 결과값이 나오게 된다!
소감
책의 내용을 읽는 것보다, 문제를 풀면서 내용을 이해하는게 더 잘되었고,
문제를 푸는 것 보다 이렇게 티스토리에 글을 올리면서 함께 스터디한 부분을 올리는게 이해가 더 잘되었다.
for문을 이해하는 과정에서 비슷한 while문,if문까지 한번에 정리가 돼서 이 파트를 맡은게 오히려 다행이라 생각한다 ㅎ
for문을 통해 자료값들을 골라내는 작업을 하는데 활용할 수 있게 되었다.
우리 코드분들 전부 티스토리 활동으로 파이썬 박사가 되어서 다같이 언능 멋진 사람이 됐으면 좋겠다
코드 화이팅!
2조도 홧팅!
작성일: 3/26
작성자: 오소민
진도: 3-3 for 문(range 함수~ 리스트 컴프리헨션)
3-3 for 문 (range 함수,리스트 컴프리헨션)
#학습내용
ⓒ range 함수란?
range 함수는 range(시작숫자,끝 숫자) 형태로 나타난다.
슬라이싱과 같이 range 함수도 끝 숫자를 포함하지 않는다.
ex) a=range(1,10) ☞ a는 1~9까지의 숫자를 담고 있다.
ⓞ for문과 자주 사용되는 range함수
for문과 range 함수를 같이 사용하면, 구구단을 만들거나 변수들의 합을 구할 수 있다.
#구구단
for i in range(2,10):
for j in range(1,10):
print(i*j,end=' ')
print('')
#변수들의 합
result=0
for i in range(1,10):
result+=i
print(result)
ⓓ추가적인 도구
☞end=' '의 의미: 끊기지 않고 한줄에 계속 출력되게 해준다.
☞구구단 예제에서 print(' ')는 단을 구분해준다.
ⓔ리스트 컴프리헨션
리스트컴프리헨션은 더 간단하게 코드를 정리해준다는 장점이 있다.
<형식>: [표현식 for 항목 in 반복가능객체 if 조건문]
◈range함수
#for문을 사용하여 1부터 100까지의 숫자를 출력해보자.
for i in range(1,100)
print(i)
◈리스트 컴프리헨션
#코드를 리스트 내포를 사용해 표현해보자
numbers=[1,2,3,4,5]
numbers=[num*10 for num in numbers]
print(numbers)
#예제문제(code up)및 풀이
원하는 단을 입력하면 출력해주는 구구단 프로그램을 만들어보자!!
print("구구단을 외우자")
gugu=int(input("원하는 단을 입력하세요:"))
for j in range(1,10):
print(gugu*j,end=" ")
점프 투 파이썬 책에는 2단 부터 9단을 출력하는 예제만 나와있었지만,위 문제는 input() 을이용하여 원하는 단을 입력하여 출력할수 있다.
간단한 숫자 프로그램을 작성해보자
#code up (예제응용해서 스토리를 만들어봄)
print("어쩌면 당신이 오늘의 주인공일수도")
print("1부터 5의 숫자가 있습니다.")
number1=float(input("그중에서 1단계 숫자를 입력하세요:"))
if number1 %2==0:
print("2단계로 진출해 볼까요?")
print("좋아하는 숫자를 머리속에 생각하세요")
number2=float(input("그 숫자에다가 + or - 두개 중 하나를 붙여 입력하세요:"))
if number2>0:
print("아쉽게도 탈락입니다")
elif number2<0:
print("축하드립니다 당첨이에요")
else:
print("다음기회에~^^")
#느낀점
조원들과 스터디를 해가면서 점점 성장하는 느낌이 들었다. 또한, 예제문제를 풀때, 다른 방식으로도 문제를 해결한 조원들의 모습을 보면서 많이 배우는 것 같다. 그러나 아직 나는 자유자재로 코드를 작성하기엔 어려움이 있는 것 같다. 앞으로 든든한 멘토님들께도 열심히 질문하고 ,스터디도 열심히 해서 얼른 다른 코드도 만들수 있게 노력해야 겠다는 생각이 들었다!! 조원들과 함께 으쌰으쌰해서 최강 2조가 되었으면 좋겠당~!!
작성자: 23 김태성
작성일: 2023/03/28
진 도: 4-1 함수 (조코딩 2:31:30 ~ 2:37:00)
a. 함수란 무엇인가?
b. 함수를 사용해야하는 이유는 무엇일까?
c. 파이썬 함수의 구조
d. 매개변수와 인수
e. 입력값 리턴값에 따른 함수의 형태
i. 일반적인 함수
ii. 입력값이 없는 함수
iii. 리턴값이 없는 함수
iv. 입력값도 리턴값도 없는 함수
내용 :
3-1 함수
함수란 무엇인가?
함수(Function)는 프로그래밍에서 코드를 재사용하기 위한 기본적인 수단 중 하나입니다. 함수는 입력 값을 받아서 그 값을 처리하고, 결과 값을 반환하는 코드 블록입니다.
함수를 사용하는 이유는 무엇일까?
프로그래밍을 하다 보면 많은 내용들이 반복되는 일이 다반사입니다. 이런일을 함수를 이용하여 시간과 노동력을 효율적으로 줄일 수 있습니다. 함수는 한 뭉치로 묶여서 어떤 입력값을 주었을 때 주어진 문제에 따라 실행을 한뒤 결과값을 반환합니다. 함수를 사용하는 또 다른 이유는 본인이 짜 놓은 코드의 진행 상황을 한 눈에 볼 수 있다는 장점이 있습니다.
파이썬 함수의 구조
파이썬 함수의 구조는 다음과 같습니다.
예제 1-1
def 함수는 예약어와 비슷합니다. 함수의 이름은 임의로 만들 수 있고, 함수 이름 뒤 괄호 안의 매개변수는 그 함수의 실행에 사용될 값을 받는 변수입니다.
예제 1-2
매개변수와 인수
<주의> 매개변수(parameter)와 인수(arguments)는 헷갈리는 용어이므로 주의가 필요합니다.
매개변수:
매개변수는 함수나 프로그램에서 어떤 작업을 수행하기 위해 필요한 정보를 전달하기 위해 사용됩니다. 함수에서 매개변수는 함수의 입력값으로 사용되며, 함수가 실행될때 함수 내에서 해당 변수에 전달된 값을 할당합니다. 이러한 매개변수를 통해 프로그램은 사용자 입력에 따라 동작됩니다.
매개변수의 유형에는 위치 매개변수와 키워드 매개변수가 있습니다.
- 위치 매개변수 - 매개변수의 위치에 따라 값을 할당합니다.
- 키워드 매개변수 - 매개변수 이름을 통해 값을 할당합니다. (키워드 매개변수는 함수 호출시 가독성과 이해도를 높여줌)
인수:
인수는 함수에 입력되는 값으로, 함수가 실행될 때 이 값들을 사용하여 결과를 도출합니다. 여러가지 인수를 받을 수 있으며, 이를 통해 함수의 결과가 다양하게 도출될 수 있습니다. 기본값을 가지는 인수는 생략하여 호출할 수도 있습니다.
입력값과 결괏값에 따른 함수의 형태
함수는 들어온 입력값을 받아서 프로그램을 따라 실행을 하여 적절한 결괏값을 돌려줍니다.
함수의 형태는 입력값과 결괏값의 존재 유무에 따라 4가지 유형으로 나뉩니다. 각 유형은 다음과 같습니다.
일반적인 함수
일반적인 함수에는 입력값과 결과값이 있습니다. 다음 예제 2-2에서 일반 함수의 전형적인 예와 형태를 보여줍니다.
예제 2-1
형태: 결괏값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...
add 함수는 2개의 입력값 a와 b를 입력받아 프로그램을 실행시켜 결과값을 반환합니다. 예를 들어, a = 3, b = 4를 입력받는다. result = a + b를 사용하여 result = 3 + 4를 하여 result = 7이 됩니다. 마지막으로 return result 로 result 에 7이란 값을 저장해 줍니다.
입력값이 없는 함수
함수 중에는 입력값이 없는 함수도 존재합니다.
예제 3-1
형태: 결괏값을 받을 변수 = 함수이름()
'인사'라는 이름의 함수를 만들었습니다. 이 함수는 입력값이 없지만 결과값으로 'Hello, world'라는 문자열을 돌려줍니다. a = 인사()처럼 작성하면 a에 'Hello, world' 문자열이 대입되는 것입니다.
결괏값이 없는 함수
이번에는 결괏값이 없는 함수를 한번 알아보도록 합니다.
예제 4-1
형태: 함수이름(입력인수1, 입력인수2, ...)
add라는 함수를 만듭니다. 매개변수는 a와 b로 설정합니다. print문 뒤로는 순서대로 각각의 %d 마다 a, b, a+b를 대입합니다. a라는 변수를 사용하여 add함수를 불러옵니다. 결과값은 보이는 것과 같이 "3, 4의 합은 7입니다." 라고 뜨게 됩니다. 하지만 다시 한번 a변수를 불러오자 none이라는 결과값이 나오게 됩니다. 그 이유는 결괏값은 오직 return 명령어로만 돌려받을 수 있기 때문입니다. 결과가 나와도 return이라는 명령어로 a라는 변수에 값을 지정해 주지 않는 다면 a는 아무것도 안들어 있는 변수입니다. 그러니 return을 쓰지 않았다면 절대 a가 결괏값을 가지고 있다고 생각하면 안된다.
입력값도 결괏값도 없는 함수
마지막으로 입력값과 결괏값 둘 다 없는 함수가 존재합니다.
예제 5-1
형태: 함수이름()
입력 인수를 받는 매개변수도 없고 return문도 없으니 입력값도 결괏값도 없는 함수 입니다. 이 함수를 사용하는 방법은 say()를 입력하는 방법입니다.
코드업에서 푼 문제:
정수 1개 입력받아 int로 변환하여 출력하기
코드업 문제
CODE 2조 3주차 활동 후기
이번주차는 코드 난이도가 한번에 확 올라가서 많은 어려움을 겪었습니다. 그래도 2조의 팀원들과 머리를 맞대고 멘토님들의 도움으로 코드업에서의 문제도 해결하고 여러가지 헷갈렸던 이론을 정정할 수 있었습니다.
2조! 가야지, 가야지 코드로 가야지~!!
지금까지 코드 2조 23 김태성이었습니다.
작성자:23이병철
작성일:03/31
진도:Jump to Python 4-1
a. 매개변수 지정하여 호출하기
b. 입력 값이 몇 개가 될지 모를 때는 어떻게 해야 할까?
c. 키워드 매개변수 kwargs
d. 함수의 리턴값은 언제나 하나이다
e. 매개변수 초기값 미리 설정하기
04-1 함수
매개변수 지정하여 호출하기
- 함수를 정의하고 호출할 때 매개변수를 지정할 수 있다.
def add(a,b):
return a+b
result=add(a=3,b=7)
print(result)
10
add함수를 만들고 매개변수 a,b를 각각 지정하여 3과7을 전달하였다.
>>>result=add(a=3,b=7)
>>>print(result)
10
이렇게 매개변수를 지정하면 순서에 상관없이 사용할 수 있다는 장점이 있다!
여러개의 매개변수 중 특정 매개변수를 이용할 때 편리하다
입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?
- 함수자체가 입력된 값을 모두 더해 주는 시스템이라면 몇개가 입력될지 모를 수도 있다.
def 함수이름(*매개변수):
<수행할 문장>
...
매개변수에 '*'표시가 추가되어 후에 입력값들은 전부 모아져 튜플로 만들어진다.
여러 개의 입력값을 받는 함수 만들기
- 여러 개의 입력값을 모두 더하는 함수를 직접 만들어 보자.
ex) 갖고 있는 초콜릿의 칼로리를 모두 더해주는 함수를 만드시오
>>>def add_choco(*luvs):
result=0
for i in luvs:
result=result+i
return result
result=add_choco(475,243,555)
>>>print(result)
1273
>>>result=add_choco(123,456,486,324,658,236,167,678,449,310)
>>>print(result)
3887
초코라는 함수를 만들었다.
luvs 입력값들을 튜플로 만들어주고, for문을 이용하여 모든 튜플의 값들을 더하기를 실행시켰다.
이를 결과값으로 저장하면 초코함수가 만들어진다.
그리하여 초코 함수를 실행해보면 가지고 있는 두 친구들의 초콜릿의 칼로리합을 알아낼 수 있다.
다먹으면 살찐다
- 그런데 꼭 *매개변수만 사용할 수 있는 것은 아니다.
ex)
def add_mul(choice,*args):
if choice=="add":
result=0
for i in args:
result=result+i
elif choice == "mul":
result=1
for i in args:
result=result*i
return result
*매개변수 앞에 choice 매개변수가 추가되어서 *매개변수 즉, 튜플의 합이냐 혹은 곱이냐를 결정지을 수 있다.
choice가 add 이면 모든 입력값의 합을,
choice가 mul 이면 모든 입력값의 곱을 나타낸다.
>>>result=add_mul('add',1,2,3,4,5)
>>>print(result)
15
>>>result=add_mul('mul',1,2,3,4,5)
>>>print(result)
120
키워드 파라미터 kwargs
- 키워드 파라미터 kwargs는 딕셔너리에 key=value 형태의 결괏값이 딕셔너리에 저장되는 함수이다
다음과 같은 함수를 작성한다
>>>def print_kwargs(**kwargs):
print(kwargs)
그리고 본격적인 딕셔너리를 만들어보자
>>>print_kwargs(a=1)
{'a':1}
>>>print_kwargs(name='foo',age=3)
{'age':3,'name':'foo'}
입력값 a=1 또는 name='foo', age=3이 모두 딕셔너리로 만들어져서 출력된다는 것을 확인할 수 있다. 즉 **kwargs처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.
함수의 결괏값은 언제나 하나이다
>>>def add_and_mul(a,b):
return a+b, a*b
>>>result= add_and_mul(3,4)
result=(7,12)
결괏값은 괄호안에 두개가 나올망정 결괏값은 오직 하나만 나온다.
add와 mul처리를 각각 a+b, a*b로 하였지만 튜플값 하나로 정리되어 나온다
>>>result1,result2=add_and_mul(3,4)
만약 2개의 결괏값처럼 받고 싶다면 위 코드처럼 (7,12) 튜플값 각각을 result1,2로 대입시켜 표현하면 된다.
# 주의! return문은 첫 함수와 만난 후 다음 함수를 빠져나가게 하니 return문을 두개를 사용해도 첫 return문만 실행된다!
하지만 이러한 return문의 특성을 이용하여 함수를 즉시 빠져나가게 할 수 있다,
ex)
>>>def say_nick(nick):
if nick =="바보":
return
print("나의 별명은 %s 입니다."% nick)
>>>say_nick('야호')
나의 별명은 야호입니다.
>>>say_nick('바보')
>>>
바보가 입력이되면 문자열을 거르고 나머지 입력값은 정상적으로 출력된다,
(아마 이 함수는 게임에서 욕설이 섞인 닉네임을 지을 때를 막기위해 사용하는 방법이지 않을까 싶다)
매개변수에 초깃값 미리 설정하기
- 매개변수에 초깃값을 미리 설정할 수 있다.
def say_myself(name,old,man=True):
print("나의 이름은 %s 입니다." %name)
print("나이는 %살입니다."%old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
if문의 true값을 매개변수에 미리 넣어주었다.
함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우엔 이렇게 함수의 초깃값을 미리 설정하면 유용하다!
say_myself("이병철",21)
say_myself("이병철",21, True)
나의 이름은 이병철입니다.
나이는 21살입니다.
남자입니다.
이렇게 만든 함수를 이용해보면 name자리에 이름을, age자리에 나이를 입력하였다.
그럼 이름과 나이가 입력이된다. 또한 man변수에는 입력값을 주진 않았지만, 초깃값인 True를 갖는 모습이다.
#주의!! 초깃값을 설정해 놓은 변수가 있다면 항상 맨뒤에 넣어야 한다. (그게 법칙이다. 언어라서 이유는 없당)
#Code up문제 풀이
-평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자.
평가 내용
평가 : 내용
A : best!!!
B : good!!
C : run!
D : slowly~
나머지 문자들 : what?
def say_grade(score):
if score =="A":
print("best!!"
elif score =="B":
print("Good!!")
elif score =="c":
print("run!!")
elif score =="d":
print("slowly~")
else:
print("what?")
후기: 그래도 조금 들은게 있다고 읽고 이해하는게 빨라졌다.
앞에서 배운것들을 응용하여 뒤에 배우는 것에 써먹는 것이니 응용하는 재미가 은근 있다 ㅎㅎ..
근데 역시 내 머리는 돌이기에 코드라는 동아리가 있어야 굴러갈 것 같다,..
함수를 내가 만드는 중요한 작업을 배웠는데 아마 이번주,담주가 젤 핵심이지 않을까 싶다
코드 홧팅!!
작성일: 4/2
작성자: 김예원
진 도: 04-1 함수
- 함수 안에서 선언한 변수의 효력 범위
- 함수 안에서 함수 밖의 변수를 변경하는 방법; 1. return 사용하기 2. global 명령어 사용하기
- lambda
04-2 사용자 입력과 출력
- 사용자 입력; input의 사용 / 프롬프트를 띄워서 사용자 입력 받기
- print 자세히 알기
# 함수 안에서 선언한 변수의 효력 범위
함수 안에서 사용할 변수의 이름을 함수 밖에서도 동일하게 사용한다면 어떻게 될까?
다음 예를 보자.
# vartest.py
a = 1
def vartest(a):
a = a + 1
vartest(a)
print(a)
먼저 a라는 변수를 생성하고 1을 대입했다. 그리고 입력으로 들어온 값에 1을 더해 주고 결괏값은 리턴하지 않는 vartest 함수를 선언했다. 그리고 vartest 함수에 입력값으로 a를 주었다. 마지막으로 a의 값을 print(a)로 출력했다.
과연 어떤 값이 출력될까?
vartest 함수에서 매개변수 a의 값에 1을 더했으니까 2가 출력될 것 같지만 프로그램 소스를 작성해서 실행해 보면 결괏값은 1이 나온다. 그 이유는 함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 "함수만의 변수"이기 때문이다. 즉 def vartest(a)에서 입력값을 전달받는 매개변수 a는 함수 안에서만 사용하는 변수이지 함수 밖의 변수 a와는 전혀 상관이 없다는 뜻이다.
※ 정리
a = 1: 함수 밖의 변수 a
vartest(a): vartest 함수의 입력값으로 a를 줌 (결괏값은 돌려주지 X)
print(a): 함수 밖의 변수 a의 값 출력 (a=1)
→ 결괏값 1
함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다.
# 함수 안에서 함수 밖의 변수를 변경하는 방법
그렇다면 vartest라는 함수를 사용해서 함수 밖의 변수 a를 1만큼 증가시킬 수 있는 방법은 없을까? 이 질문에는 2가지 해결 방법이 있다.
1. return 사용하기 ★권장
# vartest_return.py
a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a)
print(a)
>>> 2
첫 번째 방법은 return을 사용하는 방법이다. vartest 함수는 입력으로 들어온 값에 1을 더한 값을 리턴하도록 변경했다. 따라서 a = vartest(a)라고 작성하면 a에는 vartest 함수의 리턴값이 대입된다. 여기에서도 물론 vartest 함수 안의 a 매개변수는 함수 밖의 a와는 다른 것이다.
2. global 명령어 사용하기
# vartest_global.py
a = 1
def vartest():
global a
a = a + 1
vartest()
print(a)
>>> 2
두 번째 방법은 global 명령어를 사용하는 방법이다. 위 예에서 볼 수 있듯이 vartest 함수 안의 global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻이다. 하지만 프로그래밍을 할 때 global 명령어는 사용하지 않는 것이 좋다. 왜냐하면 함수는 독립적으로 존재하는 것이 좋기 때문이다. 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다. 그러므로 가급적 global 명령어를 사용하는 이 방법은 피하고 첫 번째 방법을 사용하기를 권한다.
# lambda
lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 보통 함수를 한 줄로 간결하게 만들 때 사용한다. 우리말로는 "람다"라고 읽고 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.
Ex)
add = lambda a, b: a+b
result = add(3, 4)
print(result)
>>> 7
lambda로 만든 함수는 return 명령어가 없어도 표현식의 결괏값을 리턴한다.
add는 두 개의 인수를 받아 서로 더한 값을 리턴하는 lambda 함수이다. 위 예제는 def를 사용한 다음 함수와 하는 일이 완전히 동일하다.
def add(a, b):
return a+b
result = add(3, 4)
print(result)
>>> 7
04-2 사용자 입력과 출력
우리들이 사용하는 대부분의 완성된 프로그램은 사용자 입력에 따라 그에 맞는 출력을 내보낸다. 대표적인 예로 게시판에 글을 작성한 후 "확인" 버튼을 눌러야만(입력) 우리가 작성한 글이 게시판에 올라가는(출력) 것을 들 수 있다.
우리는 이미 함수 부분에서 입력과 출력이 어떤 의미를 가지는지 알아보았다. 지금부터는 좀 더 다양한 입출력 방법에 대해서 알아보자.
# 사용자 입력
사용자가 입력한 값을 어떤 변수에 대입하고 싶을 때는 어떻게 해야 할까?
input의 사용
>>> a = input()
Life is too short, you need python
>>> a
'Life is too short, you need python'
>>>
input은 사용자가 키보드로 입력한 모든 것을 문자열로 저장한다.
프롬프트를 띄워서 사용자 입력 받기
사용자에게 입력받을 때 "숫자를 입력하세요"라든지 "이름을 입력하세요"라는 안내 문구 또는 질문이 나오도록 하고 싶을 때가 있다. 그럴 때는 input()의 괄호 안에 안내문구를 입력하여 프롬프트를 띄워주면 된다.
input("안내문구")
>>> number = input("숫자를 입력하세요: ")
숫자를 입력하세요: 3
>>> print(number)
3
>>>
input은 입력되는 모든 것을 문자열로 취급하기 때문에 number는 숫자가 아닌 문자열임에 주의하자.
# print 자세히 알기
지금껏 우리가 사용한 print 문의 용도는 데이터를 출력하는 것이었다. 데이터를 출력하는 print 문의 사용예는 다음과 같다.
이제 print문으로 할 수 있는 일에 대해서 조금 더 자세하게 알아보자.
큰따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다
>>> print("life" "is" "too short") # 1
lifeistoo short
>>> print("life"+"is"+"too short") # 2
lifeistoo short
위 예에서 1과 2는 완전히 동일한 결괏값을 출력한다. 즉 따옴표로 둘러싸인 문자열을 연속해서 쓰면 + 연산을 한 것과 같다.
문자열 띄어쓰기는 콤마로 한다
>>> print("life", "is", "too short")
life is too short
콤마(,)를 사용하면 문자열 사이에 띄어쓰기를 할 수 있다.
한 줄에 결괏값 출력하기
03-3장에서 for문을 공부할 때 만들었던 구구단 프로그램에서 보았듯이 한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end를 사용해 끝 문자를 지정해야 한다.
>>> for i in range(10):
... print(i, end=' ')
...
0 1 2 3 4 5 6 7 8 9
4-3 파일 읽고 쓰기
작성일: 4/2
작성자: 오소민
진도: 4-3 파일 읽고 쓰기
ⓒ파일 생성하기
파이썬 내장 함수 open 함수를 사용한다.
기본형식으로는☞ 파일 객체=open(파일 이름, 파일 열기모드)
EXAMPLE)
f=open("새파일.txt",'w')
f.close()
▷여기서 권장하는 점은, 파일 객체.close() 를 입력하여 직접 닫아주는 것이다.
◇파일 열기 모드
파일 열기 모드 | 설명 |
r | 읽기모드 |
w | 쓰기모드 |
a | 추가모드- 파일의 마지막에 새로운 내용을 추가할때 사용 |
ⓞ파일을 쓰기 모드로 열어 내용 쓰기
#wirtedata.py
f=open("C:/sompc/newfile.txt",'w')
for i in range(1,19):
text="%d번째 줄입니다./n" % i
f.write(text)
f.close()
1. open 함수로 파일을 만들어 줌
2. 반복의 특성을 가지고 있는 for 을 사용하여 range와 함께 사용
3.다음과 같이 text 출력하도록 만듦
4. print(text) 대신 f.write(text) 를 사용함
ⓓ파일을 읽는 여러가지 방법 중 readline 함수
#readline.py
f=open("C:sompc/newfile.txt",'r')
line=f.readline()
print(line)
f.close
♬ 단, newfile이 #wriredata.py로 인해 내용이 입력되어 있다고 가정하자.
그러면, 첫번째 줄이 화면에 출력된다.
☞caution: 한줄 씩 출력할때, 줄 끝엔 암묵적으로 \n 이 있다고 한다, 따라서, 빈줄이 같이 출력된다.
ⓓ code up 예제문제 풀이
#함수로 Love n번 출력하기
-> def 함수와 매개변수를 이용하여 만들어봄
script
1.def 함수를 사용해보자(->응용)
2. 매개변수는 ->number로 해보자
3. 문제의 의도가 Love를 n번 출력하는 것이니까, 작성자 내맘대로 매개변수에 숫자를 지정해주면 값이 나오지 않을까?
4. 결과 값은 'Love' * number로 하고
5. return을 아무래도 적는게 좋겠지?
6. print(결과값) 꼭 하자...
#codeup 예제 풀이
def LOVE(number):
result='Love'*number
return result
real_result=LOVE(4)
print(real_result)
☆느낀점
뒤로 갈수록 내용이 어려워지고 코드업 문제도 점점 난도가 높아지는것 같다.
또한, 기본적인 실수들도 많이 하는 것 같다.
매개변수에 값을 넣었는데 print() 안 했으면서 결과가 왜 안나오지 멀뚱거리고 있는 내 자신이 너무 웃겼다,,,,ㅎㅎ
아무래도 공부를 더 해야할듯 하다..
작성일: 4/3
작성자: 박은오
진도: 4-3 파일 읽고 쓰기
a. 파일을 읽는 여러 가지 방법
i. readline 함수 사용하기
ii. readlines 함수 사용하기
iii. read 함수 사용하기
iiii. 파일 객체를 for문 함께 사용하기
b. 파일에 새로운 내용 추가하기
c. with문과 함께 사용하기
04-3 파일 읽고 쓰기
# 파일을 읽는 여러 가지 방법
1. readline 함수 이용하기
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
위 예는 f.open("새파일.txt", 'r')로 파일을 읽기 모드로 연 후 readline()을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 예제이다.
앞에서 만든 새파일.txt를 수정하거나 지우지 않았다면 위 프로그램을 실행했을 때 새파일.txt의 가장 첫 번째 줄이 화면에 출력될 것이다.
2. readlines 함수 이용하기
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트를 리턴한다.
따라서 위 예에서 lines는 리스트 ["1 번째 줄입니다.\n", "2 번째 줄입니다.\n", ..., "10 번째 줄입니다.\n"]가 된다.
f.readlines()에서 f.readline()과는 달리 s가 하나 더 붙어 있음에 유의하자.
3. read 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
f.read()는 파일의 내용 전체를 문자열로 리턴한다. 따라서 위 예의 data는 파일의 전체 내용이다.
4. 파일 객체를 for문과 함께 사용하기
f = open("C:/doit/새파일.txt", 'r')
for line in f:
print(line)
f.close()
파일 객체(f)는 기본적으로 위와 같이 for 문과 함께 사용하여 파일을 줄 단위로 읽을 수 있다.
# 파일에 새로운 내용 추가하기
쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다.
원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우 파일을 추가 모드('a')로 열면 된다.
추가 모드 a는 append의 약자이다.
Ex) 추가 모드
f = open("C:/doit/새파일.txt",'a')
for i in range(11, 20):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
위 예는 새파일.txt 파일을 추가 모드('a')로 열고 write를 사용해서 결괏값을 기존 파일에 추가해 적는 예이다.
여기에서 추가 모드로 파일을 열었기 때문에 새파일.txt 파일이 원래 가지고 있던 내용 바로 다음부터 결괏값을 적기 시작한다.
# with문과 함께 사용하기
파일을 열면(open) 항상 닫아(close) 주어야 한다.
with문을 사용하면 파일을 열고 닫는 것을 자동으로 처리할 수 있다.
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")
위와 같이 with문을 사용하면 with 블록(with 문에 속해있는 문장)을 벗어나는 순간 열린 파일 객체 f가 자동으로 close된다.
# 느낀점
뒤로 갈수록 내용이 어려워지고 지엽적인 부분도 많이 알려주고 점점 난도가 높아져 힘든 것 같다.
또한, 기본적인 내용들을 많이 까먹어 앞부분 내용복습을 많이 해야하는 것 같다.
더 열씨미해서 우리 조가 모두 코딩장인이 되기를......
'Study > Jump to python' 카테고리의 다른 글
Jump to Python #1 (0) | 2023.03.24 |
---|---|
점프 투 파이썬 스터디 학습 가이드 (0) | 2023.02.26 |