04-2 ~ 04-3 (p.168 ~ p.178)

 

이제 반 정도 왔다. 여기까지 오니까 슬슬 초반에 배웠던 부분들이 가물가물해지려고 한다. 매일마다 복습도 꾸준히 해야겠다.

아직까지는 지금까지 배운 걸로 프로그램을  만들 수 있을 것 같은 느낌은 들지 않는다. 그래서 아직 불안한 느낌이 드는지도 모르겠다. 계속해서 공부를 하는 수밖에 없을 거 같다.

 

열심 또 열심히..!

 


 

04-2 사용자 입력과 출력

 

사용자의 입력을 받는 방법과 출력하는 방법은 여러 가지가 있다.

 

사용자 입력

사용자가 입력한 값을 어떤 변수에 대입하려고 할 때는 이런 방법들이 있다.

# input의 사용
a = input()
>>> Life is too short, you need python
a
>>> 'Life is too short, you need python'
# input은 입력되는 모든 것을 문자열로 취급한다.


# 프롬프트 값을 띄워서 사용자 입력받기
# input("내용 입력")
number = input("숫자를 입력하세요 : ")
>>> 숫자를 입력하세요 : 3
print(number)
>>> 3

 

print 자세히 알기

print문으로 할 수 있는 일은 여러 가지가 있다.

# 큰따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다
print("life" "is" "too short")
>>> lifeistoo short
print("life" + "is" + "too short")
>>> lifeistoo short

# 문자열 띄어쓰기는 콤마로 한다
print("life", "is", "too short")
>>> life is too short

# 한 줄에 결괏값 출력하기
for i in range(10):
    print(i, end=' ') # end 사용

>>> 0 1 2 3 4 5 6 7 8 9 >>>

 

04-3 파일 읽고 쓰기

 

이제까지는 값을 '입력'받을 때는 사용자가 직접 입력하는 방식을 사용했고 '출력'할 때는 모니터 화면에 결괏값을 출력하는 방식으로 프로그래밍해 왔다. 하지만 입출력 방법에는 꼭 이것만 있는 것은 아니다. 여기에서는 파일을 통한 입출력 방법을 배웠다.

 

파일 생성하기

f = open("새파일.txt", 'w')
f.close()

# 파일 객체 = open(파일 이름, 파일 열기 모드)
# open 함수는 '파일 이름'과 ' 파일 열기 모드'를 입력값으로 받고 결괏값으로 파일 객체를 돌려준다.

# C:/doit 디렉터리에 생성하고 싶을 때
f = open("C:/doit/새파일.txt", 'w')
f.close()
파일 열기 모드 설명
r 읽기 모드 - 파일을 읽기만 할 때 사용
w 쓰기 모드 - 파일에 내용을 쓸 때 사용
a 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용

* 파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다.

* 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아 주기 때문에 close()는 생략해도 되지만 되도록이면 사용해 주는 것이 좋다. 쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.

 

파일을 쓰기 모드로 열어 출력 값 적기

이번에는 프로그램의 출력 값을 파일에 직접 써본다.

f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

# 실행하면 1번째 줄입니다. ~ 10번째 줄입니다. 라고 적혀있는 메모장 파일이 생성된다.

 

프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

파이썬에는 외부 파일을 읽어 들여 프로그램에서 사용할 수 있는 여러 가지 방법이 있다.

# readline 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
# readline 함수는 파일의 첫 번째 줄을 읽어 출력하는 함수이다.
# 실행하면 새파일.txt의 가장 첫 번째 줄인 '1번째 줄입니다.'가 출력된다.

# readlines 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()
# readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다.

# read 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
# f.read()는 파일의 내용 전체를 문자열로 돌려준다.

 

파일에 새로운 내용 추가하기

원래 있던 값을 유지하면서 새로운 값을 추가해야 할 경우에는 파일을 추가 모드('a')로 열면 된다.

# 추가 모드를 사용한 예
f = open("C:/doit/새파일.txt", 'a')
for i in range(11, 20):
    data = "%d 번째 줄입니다.\n" % i
    f.write(data)
f.close()
# 실행하면 '10번째 줄입니다.'의 뒤를 이어 '11번째 줄입니다' ~ '19번째 줄입니다'까지 출력된다.

 

with문과 함께 사용하기

지금까지는 항상 코드 마지막에 f.close()를 추가해서 파일을 닫아왔다. 파일을 열면 항상 close 해 주는 것이 좋다.

하지만 with문을 사용하면 파일을 열고 닫는 것을 자동으로 처리할 수 있다.

# with문을 사용한 예
with open("foo.txt", "w") as f:
    f.write("Life is too short, you need python")
# with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close 된다.

 

03장 연습문제 ~ 04-1 (p.146 ~ p.167)

 

이번 주는 설 연휴가 있어서 토요일이 되어서야 6일 차 공부를 할 수 있었다.

며칠을 쉬다가 다시 공부를 하려니까 초큼 힘들었다...😂

6일 차인데 벌써 함수 부분까지 왔다. 책의 권장 진도보다 2배가 빠른 만큼 전에 배운 내용을 잊지 않기 위해 복습도 철저하게 해야겠다.

 

가지마아아...

 


 

03장 연습문제는 확실히 2장에서 배운 내용까지 합쳐서 나오다 보니 2장 연습문제보다는 조금 난이도가 있었다.

헷갈리는 부분은 전에 작성한 블로그 글을 훑어보니 해결할 수 있었다.

 

4장 : 프로그램의 입력과 출력

 

4장에서는 프로그램의 입력과 출력을 다루는 방법을 설명하는데 그중에서 오늘은 함수에 대해서 배웠다.

입출력 부분은 프로그래밍의 설계과 밀접한 관련이 있기 때문에 매우 중요한 부분이기도 하다.

 

04-1 함수

 

함수는 과일이 입력, 과일 주스가 출력이라면 믹서는 함수에 비유할 수 있다.

즉, 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내놓는 일을 하는 것이 함수이다.

 

함수를 사용하는 이유

함수는 프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성하는 경우가 있을 때 사용하면 시간도 절약할 수 있고 코드도 일목요연하게 작성할 수 있어서 가독성 측면에서 장점이 있다. 그래서 버그를 확인할 때도 유용할 수 있다.

# 파이썬 함수의 기본적인 구조
def 함수이름(매개변수):
    수행할 문장1
    수행할 문장2
    ...
    
# 기본적인 예
def add(a, b): # a, b는 매개변수
    return a + b # return은 함수의 결괏값을 돌려주는 명령어 
                 # 이 함수의 이름은 add이고 입력으로 2개의 값을 받으며 결괏값은 2개의 입력값을 더한 값이다.

print(add(3, 4)) # 3, 4는 인수
>>> 7

 

입력값과 결괏값에 따른 함수의 형태

함수의 형태는 입력값과 결괏값의 존재 유무에 따라 4가지 유형으로 나뉜다.

# 일반적인 함수
def add(a, b):
    result = a + b
    return result
    
a = add(3, 4) # 결괏값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
print(a)
>>> 7


# 입력값이 없는 함수
def say():
    return 'Hi'

a = say() # 결괏값을 받을 변수 = 함수이름()
print(a)
>>> Hi


# 결괏값이 없는 함수
def add(a, b):
    print("%d, %d의 합은 %d입니다." % (a, b, a+b))
    
add(3, 4) # 함수이름(입력인수1, 입력인수2, ...)
>>> 3, 4의 합은 7입니다.


# 입력값도 결괏값도 없는 함수
def say():
    print('Hi')
    
say() # 함수이름()
>>> Hi

 

매개변수 지정하여 호출하기

def add(a, b):
    return a+b
    
result = add(a=3, b=7) # a에 3, b에 7을 전달
print(result)
>>> 10

result = add(b=7 a=3) # 순서 상관 없이 사용 가능
print(result)
>>> 10

 

입력값이 몇 개가 될지 모를 때

매개변수 앞에 *를 붙인다.

def add_mul(choice, *args): # 매개변수 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
    
result = add_mul('add', 1,2,3,4,5)
print(result)
>>> 15
result = add_mul('mul', 1,2,3,4,5)
print(result)
>>> 120

 

키워드 파라미터

def print_kwargs(**kwargs): # 매개변수 앞에 **를 붙이면 입력값이 딕셔너리로 출력
    print(kwargs)
    
print_kwargs(a=1)
>>> {'a' : 1}
print_kwargs(name='foo', age=3)
>>> {'age' : 3, 'name' : 'foo'}

 

* 함수의 결괏값은 언제나 하나이다.

def add_and_mul(a,b):
    return a+b, a*b
    
result = add_and_mul(3,4)
print(result)
>>> (7, 12) # 결괏값을 튜플로 돌려준다.

def add_and_mul(a,b):
    return a+b
    return a*b
    
result = add_and_mul(3,4)
print(result)
>>> 7 # 결괏값은 언제나 하나이기 때문에 첫 번째 return문만 반환

 

* return은 단독으로 사용해서 함수를 빠져나올 때 사용할 수도 있다.

 

매개변수 초깃값 미리 설정하기

def say_myself(name, old, man=True): # 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에 유용
    print("나의 이름은 %s입니다." % name)
    print("나이는 %d살입니다." % old)
    if man:
        print("남자입니다.")
    else:
        print("여자입니다.")
        
say_myself("홍길동", 26)
>>> 나의 이름은 홍길동입니다.
    나이는 26살입니다.
    남자입니다.
say_myself("홍길동", 26, True)
>>> 나의 이름은 홍길동입니다.
    나이는 26살입니다.
    남자입니다.
say_myself("홍길순", 26, False)
>>> 나의 이름은 홍길동입니다.
    나이는 26살입니다.
    여자입니다.

# 초기화시키고 싶은 매개변수는 항상 맨 뒤쪽에 놓아야 한다.

 

함수 안에서 선언한 변수의 효력 범위

함수 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관이 없기 때문에 서로 같은 변수로 취급하면 안 된다.

a = 1
def vartest(a):
    a = a + 1
    
vartest(a)
print(a)
>>> 1 # 함수 밖의 a 변수와 함수 안의 a변수는 서로 다른 것이기 때문에 결괏값이 2가 아닌 1


def vartest(a):
    a = a + 1
    
vartest(3)
print(a)
>>> 오류 발생 # print(a)에서 입력받아야 하는 a 변수가 존재하지 않기 때문(함수 밖에 변수가 존재하지 않는다.)
# 함수 안에서 함수 밖의 변수를 변경하는 방법

# 1. return 사용하기
b = 1
def vartest(a):
    a = a + 1
    return a
    
b = vartest(b) # b가 vartest 함수의 결괏값으로 바뀜. b 변수가 vartest 함수의 a 매개변수에 대입됨
print(b)
>>> 2


# 2. global 명령어 사용하기
a = 1
def vartest():
    global a # 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻
    a = a + 1
    
vartest()
print(a)
>>> 2 # global 명령어는 되도록 사용하지 않는 것이 좋음
      # 함수는 독립적으로 존재하는 것이 좋기 때문
      # 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아님

 

lambda

함수를 생성할 때 사용하는 예약어로 def와 동일한 역할. 보통 함수를 한 줄로 간결하게 만들 때 사용한다.

# lambda의 구조
lambda 매개변수1, 매개변수2, ...: 매개변수를 사용한 표현식

# lambda의 예
add = lambda a, b: a+b
result = add(3, 4)
print(result)
>>> 7

# 이 함수와 동일
def add(a, b):
    return a+b

result = add(3, 4)
print(result)
>>> 7

 

03-2 ~ 03-3 (p.130 ~ p.145)

 

벌써 오늘 3장이 끝났다. 30일치를 반으로 줄이니까 확실히 진도가 빠르다.

아직까지는 이해가 잘 되어서 다행이다. 앞으로도 계속 텐션을 유지했으면 좋겠다.

 

 

이대로 쭉 가즈아

 


 

03-2 while문

 

while문은 반복해서 문장을 수행해야 할 경우에 사용한다. 그래서 반복문이라고도 부른다.

# while문의 기본 구조
while 조건문:
    수행할 문장1
    수행할 문장2
    수행할 문장3
    ...
# 조건문이 참인 동안에 while문 아래의 문장이 반복해서 수행
# while문의 예
treeHit = 0 # 나무를 찍은 횟수
while treeHit < 10: # 나무를 찍은 횟수가 10보다 작은 동안 반복
    treeHit = treeHit + 1 # 나무를 찍으 횟수 1씩 증가
    print("나무를 %d번 찍었습니다." % treeHit)
    if treeHit == 10: # 나무를 열 번 찍으면
        print("나무 넘어갑니다.")

>>> 나무를 1번 찍었습니다.
    나무를 2번 찍었습니다.
    나무를 3번 찍었습니다.
    ...
    나무를 10번 찍었습니다.
    나무 넘어갑니다.

 

while문 강제로 빠져나가기

커피 자판기에서 커피가 떨어졌을 때 판매를 중단하고 '판매 중지' 문구를 사용자에게 보여줘야 하는 상황처럼 조건문이 참이지만 강제로 while문을 빠져나가고 싶을 때는 break문을 사용한다.

# break문이 포함된 커피자판기 코드의 예
coffee = 10
while True:
    money = int(input("돈을 넣어 주세요: "))
    if money == 300:
        print("커피를 줍니다.")
        coffee = coffee - 1
    elif money > 300:
        print("거스름돈 %d를 주고 커피를 줍니다." % (money - 300))
        coffee = coffee - 1
    else:
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개입니다." % coffee)
    if coffee == 0:
        print("커피가 다 떨어졌습니다 판매를 중지합니다.")
        break

 

while문의 맨 처음으로 돌아가기

while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우에는 continue문을 사용한다.

# continue문 사용의 예 (1부터 10까지의 숫자 중 홀수만 출력하는 코드)
a = 0
while a < 10:
    a = a + 1
    if a % 2 == 0: continue # a를 2로 나누었을 때 나머지가 0이면 맨 처음으로 돌아간다.
    print(a)

>>> 1
    3
    5
    7
    9

 

무한 루프

파이썬에서 무한 루프는 while문으로 구현할 수 있다.

# 무한 루프의 기본 구조
while True:
    수행할 문장 1
    수행할 문장 2
    ...
# 무한 루프의 예
while True:
    print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")

>>> Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
    Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
    Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
    .
    .
    .

 

 

03-3 for문

 

파이썬의 직관적인 특징을 가장 잘 대변해 주는 것이 for문이다. while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 들어온다는 장점이 있다.

# for문의 기본 구조
for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ...
# for문의 예
# 1. 전형적인 for문
test_list = ['one', 'two', 'three']
for i in test_list: # one, two, three를 순서대로 i에 대입
    print(i)

>>> one
    two
    three

# 2. 다양한 for문의 사용
a = [(1, 2), (3, 4), (5, 6)]
for (first, last) in a:
    print(first + last)

>>> 3 # first : 1, last : 2
    7 # first : 3, last : 4
    11 # first : 5, last : 6

# 3. for문의 응용
marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
number = 0 # 학생들에게 붙여 줄 번호
for mark in marks: # 90, 25, 67, 45, 80을 순서대로 mark에 대입
    number = number + 1
    if mark >= 60:
        print("%d번 학생은 합격입니다." % number)
    else:
        print("%d번 학생은 불합격입니다." % number)

>>> 1번 학생은 합격입니다.
    2번 학생은 불합격입니다.
    3번 학생은 합격입니다.
    4번 학생은 불합격입니다.
    5번 학생은 합격입니다.

* for문에도 while문처럼 continue문을 사용할 수 있다.

 

for문과 함께 자주 사용하는 range함수

range 함수는 숫자 리스트를 자동으로 만들어 준다.

# range 함수의 사용법
a = range(10)
a
>>> range(0, 10) # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
# range 함수의 예
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
    if marks[number] < 60: continue
    print("%d번 학생 축하합니다. 합격입니다." % (number+1))

>>> 1번 학생 축하합니다. 합격입니다.
    3번 학생 축하합니다. 합격입니다.
    5번 학생 축하합니다. 합격입니다.

# for와 range를 사용한 구구단
for i in range(2, 10)
    for j in range(1, 10)
        print(i * j, end = " ") # 결괏값을 출력할 때 다음 줄로 넘지 않고 그 줄에 계속 출력하기 위해 end 삽입
    print('') # 2단, 3단 등을 구분하기 위해 두 번째 for문이 끝나면 결괏값을 다음 줄부터 출력하게 해주는 문장

>>> 2 4 6 8 10 12 14 16 18
    3 6 9 12 15 18 21 24 27
    4 8 12 16 20 24 28 32 36
    5 10 15 20 25 30 35 40 45
    6 12 18 24 30 36 42 48 54
    7 14 21 28 35 42 49 56 63
    8 16 24 32 40 48 56 64 72
    9 18 27 36 45 54 63 72 81

 

리스트 내포 사용하기

리스트 안에 for문을 포함하는 리스트 내포를 사용하면 더 직관적으로 만들 수 있다.

# 리스트 내포의 기본 구조
[표현식 for 항목 in 반복 가능 객체 if 조건]

# 2개 이상 사용도 가능
[표현식 for 항목1 in 반복 가능 객체1 if 조건1
        for 항목2 in 반복 가능 객체2 if 조건2
        ...
        for 항목n in 반복 가능 객체n if 조건n]
# 리스트 내포의 예
a = [1, 2, 3, 4]
result = [num * 3 for num in a]
print(result)
>>> [3, 6, 9, 12]

a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]
print(result)
>>> [6, 12]

 

02장 연습문제 ~ 03-1 (p.112 ~ p.129)

 

공부 시작 후 한 챕터가 끝나고 첫 연습문제를 풀어보았다. 헷갈린 부분이 약간 있었지만 전체적으로 무난하게 풀 수 있었다. 푸는 시간도 생각보다 얼마 걸리지 않았다.

최근에 올라온 유튜브 뉴스 영상에서 개발자를 준비하는 비전공자나 고졸들이 점점 많아지고 있다는 영상을 보았는데 댓글에 대부분의 사람들이 비전공자가 독학이나 학원에서 배우면 잘 되기 힘들다고해서 하루 종일 기분이 별로 좋지 않았다...ㅠㅠ 지금 하는게 잘 하고 있는건지 의문이 들었다.

 

하지만! 나는 아직 젊고 시작한지도 얼마 되지 않았기 때문에 일단은 계속 해보기로 결심했다.(진지)

 

 

 


 

3장 : 제어문

 

3장에서는 if, while, for 등의 제어문에 대해서 배운다. 집을 지을 때 나무, 돌, 시멘트 같은 재료는 자료형이라고 할 수 있다면, 집의 뼈대를 이루는 철근은 제어문이라고 할 수 있다.

 

03-1 if문

 

if문은 단어의 뜻 그대로 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 사용하는 제어문이다.

# if문의 기본 구조
if 조건문:
    수행할 문장1
    수행할 문장2
    ...
else:
    수행할 문장A
    수행할 문장B
    ...
# 조건문이 참이면 if문 바로 다음 문장 수행
# 조건문이 거짓이면 else문 바로 다음 문장 수행
# if문의 예
money = True
if money: # 조건문
    print("택시를 타고 가라")
else: # 조건에 해당되지 않으면
    print("걸어 가라")

>>> 택시를 타고 가라

* if문을 만들 때는 if 조건문:과 else: 에 속하는 바로 아래 문장부터는 모든 문장에 들여쓰기를 꼭 해야 한다.

  들여쓰기를 제대로 하지 않으면 오류가 발생.

* 키보드의 tab버튼을 누르거나 띄어쓰기를 4번 해주면 되는데 보통 띄어쓰기 4번을 많이 사용한다. 

  단, tab과 띄어쓰기 4번을 섞어서 사용하는 것은 좋지 않다. 섞어 사용하면 다른 곳에서 파일을 열 때 정렬이 뒤죽박죽    이 될 수 있기 때문.

* VScode나 파이참 같은 에디터에서는 tab키를 눌러도 자동으로 띄어쓰기 4번을 한 것으로 처리된다.


비교 연산자 설명
x < y x가 y보다 작다
x > y x가 y보다 크다
x == y x와 y가 같다
x != y x와 y가 같지 않다
x >= y x가 y보다 크거나 같다
x <= y x가 y보다 작거나 같다

 

# 비교 연산자를 사용한 if문의 예
money = 2000
if money >= 3000: # money를 3000원 이상 가지고 있으면,
    print("택시를 타고 가라")
else:
    print("걸어 가라")

>>> 걸어 가라 # money가 3000원 보다 적으므로

연산자 설명
x and y x와 y 모두 참이어야 참이다
x or y x와 y 둘 중에 하나만 참이어도 참이다
not x x가 거짓이면 참이다

 

# or 연산자를 사용한 if문의 예
money = 2000
card = True
if money >= 3000 or card:
    print("택시를 타고 가라")
else:
    print("걸어 가라")

>>> 택시를 타고 가라 # money가 3000원보다 적지만 card가 있기 때문에 참

in not in
x in 리스트 x not in 리스트
x in 튜플 x not in 튜플
x in 문자열 x not in 문자열

 

# in, not in 연산자의 예
1 in [1, 2, 3]
>>> True
1 not in [1, 2, 3]
>>> False

# in 연산자를 사용한 if문의 예
pocket = ['paper', 'cellphone', 'money']
if 'money' in pocket:
    print("택시를 타고 가라")
else:
    print("걸어 가라")

>>> 택시를 타고 가라 # pocket 안에 'money'가 있으므로 참

* 조건문에서 아무 일도 하지 않게 설정하고 싶을 때는 if 조건문 밑에 pass를 넣는다.

 

다양한 조건을 판단하는 elif

elif는 다중 조건 판단이 필요할 때 사용하면 유용하다.

# elif를 사용한 예
pocket = ['paper', 'cellphone']
card = True
if 'money' in pocket: # pocket에 'money'가 있으면
    print("택시를 타고 가라")
elif card: # pocket에 'money'가 없고 'card'가 있으면
    print("택시를 타고 가라")
else: # pocket에 'money'도 없고 'card'도 없으면
    print("걸어 가라")

>>> 택시를 타고 가라 # pocket에 'money'가 없지만 'card'가 있기 때문에 참

elif는 개수 제한 없이 사용할 수 있다.

 

 

# if문 한 줄로 작성하기
pocket = ['paper', 'money', 'cellphone']
if 'money' in pocket: pass
else: print("카드를 꺼내라") # 수행할 문장이 한 줄일 때 이런 식으로 작성할 수 있다.

 

조건부 표현식

if score >= 60:
    message = "success"
else:
    message = "failure"

# 조건부 표현식 사용
message = "success" if score >= 60 else "failure"
# 조건부 표현식 : 조건문이 참인 경우 if 조건문 else 조건문이 거짓인 경우

 

02-7 ~ 02-8 (p.102 ~ p.111)

 

가장 고비라는 3일째이다.. 다행히도 아직까지는 괜찮은 거 같다..!

 

고비를 넘긴건가..!

 


 

02-7 불(bool) 자료형

 

참(True)과 거짓(False)을 나타내는 자료형. (True : 참, False : 거짓) 값만을 가질 수 있다. (True, False의 시작은 꼭 대문자)

# 불(bool) 자료형의 예
a = True
b = False
type(a)
>>> <class 'bool'>
type(b)
>>> <class 'bool'> # 둘 다 자료형이 'bool'인 것을 확인

2 > 1
>>> True
2 < 1
>>> False

* 문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면(" ", [ ], ( ), { }) 거짓. 숫자는 값이 0이면 거짓. None거짓.

  비어있지 않거나 0이 아니면 .

 

불 연산

# 불(bool) 연산의 예
bool('python')
>>> True
bool('')
>>> False
bool ([1, 2, 3])
>>> True
bool([])
>>> False
bool(0)
>>> False
bool(3)
>>> True

 

 

02-8 자료형의 값을 저장하는 공간, 변수

 

파이썬에서 사용하는 변수는 객체를 가리키는 것이라고 할 수 있음. 객체란 자료형과 같은 것을 의미.

# 변수의 예
a = [1, 2, 3] # a가 변수. [1, 2, 3] 리스트 자료형(객체)이 자동으로 메모리에 저장.
	      # 변수 a는 [1, 2, 3] 리스트가 저장된 메모리의 주소.

# 메모리 주소 확인
a = [1, 2, 3]
id(a) # id는 변수가 가리키고 있는 객체의 주소 값을 돌려주는 내장 함수.
>>> 4302394813
# 리스트 복사
a = [1, 2, 3]
b = a
id(a)
>>> 4302394813
id(b)
>>> 4302394813
a is b # is는 동일한 객체를 가리키고 있는지에 대해서 판단하는 명령어.
>>> True

a[1] = 4
a
>>> [1, 4, 3]
b
>>> [1, 4, 3] # a와 b는 같기 때문에 값을 변경해도 동일하게 변경.
# 변수의 값은 같지만 서로 다른 주소를 가리키도록 하는 방법

# 1. [:] 사용
a = [1, 2, 3]
b = a[:] # 리스트 a의 처음 요소부터 끝 요소까지 슬라이싱
a[1] = 4
a
>>> [1, 4, 3]
b
>>> [1, 2, 3] # a는 값이 변경되었지만 b는 그대로

# 2. copy 모듈 사용
from copy import copy # 모듈은 뒤에서 다룸
a = [1, 2, 3]
b = copy(a) # = b = a[:]
b
>>> [1, 2, 3]
b is a
>>> False

 

변수를 만드는 여러 가지 방법

a, b = ('python', 'life') # 튜플
(a, b) = 'python', 'life' # 위와 완전히 동일
a
>>> 'python'
b
>>> 'life'

[a, b] = ['python', 'life'] # 리스트
a
>>> 'python'
b
>>> 'life'

a = b = 'python' # 여러 개의 변수에 같은 값 대입 가능

a = 3
b = 5
a, b = b, a # a와 b의 값을 바꿈
a
>>> 5
b
>>> 3

 

02-3 ~ 02-6 (p.72 ~ p.101)

 

공부 계획을 짰을 때는 30일 치를 15일 치로 줄여서 공부 분량이 너무 많나 걱정했지만 이틀 동안 해보니 아직까지는 생각보다 할만한 거 같다. 이 기세로 쭉 가려고 노력해야겠다.

 

아직 적응 안되는 나의 모습 ㅠ

 


 

02-3 리스트 자료형

 

# 리스트 자료형의 예
a = [1, 2, 3, 4, 5]
b = [1, 2, 'Hello', 'World']
c = [1, 2, ['Hello', 'World']]

* 리스트도 문자열처럼 인덱싱과 슬라이싱, 연산이 가능.

# 2중 리스트에서 특정 요소 인덱싱
a = [1, 2, ['Hello', 'World']]
a[2][0]
>>> 'Hello'
# (슬라이싱도 동일한 방법으로)
# 리스트의 수정, 삭제
a = [1, 2, 3]
a[2] = 4
a
>>> [1, 2, 4] # 수정

del a[:2]
a
>>> [4] # 삭제

 

리스트 관련 함수

# 리스트에 요소 추가 (append)
a = [1, 2, 3]
a.append(4)
a
>>>[1, 2, 3, 4]
a.append([5, 6])
a
>>>[1, 2, 3, 4, [5, 6])

# 리스트 정렬 (sort)
a = [1, 3, 2, 4]
a.sort()
a
>>> [1, 2, 3, 4]

# 리스트 뒤집기 (reverse)
a = ['a', 'b', 'c']
a.reverse()
a
>>> ['c', 'b', 'a']

# 위치 반환 (index)
a = [1, 2, 3]
a.index(2)
>>> 1 # 2는 리스트 a의 두번째(a[1]) 요소

# 리스트에 요소 삽입 (insert)
a = [1, 2, 3]
a.insert(0, 4) # a[3] 위치에 4 삽입
>>> [4, 1, 2, 3]

# 리스트 요소 제거 (remove)
a = [1, 2, 3, 1, 2, 3]
a.remove(3)
>>> [1, 2, 1, 2, 3]
a.remove(3)
>>> [1, 2, 1, 2]

# 리스트 요소 끄집어내기 (pop)
a = [1, 2, 3]
a.pop() # 리스트의 맨 마지막 요소 돌려준 후 삭제
>>> 3
a
>>> [1, 2]
a.pop(1) # 리스트의 a[1]번째 요소 돌려준 후 삭제
>>> 2
a
>>> [1, 3]

# 리스트에 포함된 요소 x의 개수 세기 (count)
a = [1, 2, 3, 1]
a.count(1)
>>> 2

# 리스트 확장 (extend)
a = [1, 2, 3]
a.extend([4, 5])
a
>>> [1, 2, 3, 4, 5]
b = [6, 7]
a.extend(b)
a
>>> [1, 2, 3, 4, 5, 6, 7]

 

 

02-4 튜플 자료형

 

리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.

리스트는 값의 생성, 삭제, 수정이 가능하지만 튜플은 값을 바꿀 수 없다.

# 튜플 자료형의 예
t1 = (1, )
t2 = (1, 2, 3)
t3 = 1, 2, 3
t4 = ('a', 'b', ('ab', 'cd'))

* 튜플은 값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전히 동일.

 

 

02-5 딕셔너리 자료형

 

딕셔너리는 대응 관계를 나타낼 수 있는 자료형.

# 딕셔너리 자료형의 예
dic = {'name':'홍길동', 'phone':'010-1234-5678', 'birth':'0203'}
# 'name'이 Key값, '홍길동'이 Value값
a = {1:'hi'}
b = {'a':[1, 2, 3]}
# 딕셔너리 쌍 추가, 삭제
a = {1:'a'}
a[2] = 'b'
a
>>> {1:'a', 2:'b'} # 딕셔너리 쌍 추가
del a[1]
a
>>> {2:'b'} # 딕셔너리 요소 삭제

# 딕셔너리에서 Key 사용해 Value 얻기
status = {'name':'홍길동', 'age':'30'}
status['name']
>>> '홍길동'

# 주의사항
a = {1:'a', 1:'b'}
a
>>> {1:'b'} # Key 값이 중복되면 하나를 제외한 나머지 것들이 무시됨

 

딕셔너리 관련 함수

# Key 리스트 만들기 (keys)
a = {'name':'홍길동', 'age':30, 'birth':'0203'}
a.keys()
>>> dict_keys(['name', 'age', 'birth'])
List(a.keys()) # dict_keys 객체를 리스트로 변환할때 사용
>>> ['name', 'age', 'birth']

# Value 리스트 만들기 (values)
a.values()
>>> dict_values(['홍길동', 30, '0203']) # 리스트로 변환할때 위와 동일

# Key, Value 쌍 얻기 (items)
a.items()
>>> dict_items([('name', '홍길동'), ('age', 30), ('birth', '0203')]) # 리스트로 변환할때 위와 동일

# Key:Value 쌍 모두 지우기 (clear)
a.clear()
a
>>> {}

# Key로 Value 얻기 (get)
a = {'name':'홍길동', 'age':30, 'birth':'0203'}
a.get('name')
>>> '홍길동'
a.get('phone', '없음') # a 딕셔너리 안에 'phone' Key가 없으면 '없음' 반환
>>> '없음'

# 해당 Key가 딕셔너리 안에 있는지 조사 (in)
a = {'name':'홍길동', 'age':30, 'birth':'0203'}
'name' in a
>>> True
'phone' in a
>>> False

 

 

02-6 집합 자료형

 

집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형

# 집합 자료형의 예
s1 = set([1, 2, 3])
s1
>>> {1, 2, 3}
s2 = set("Hello")
s2
>>> {'e', 'H', 'l', 'o'}

* s2처럼 집합 자료형은 중복을 허용하지 않고 순서가 없다.

# set 자료형에 저장된 값을 인덱싱으로 접근 방법
s1 = set([1, 2, 3])
l1 = list(s1)
l1
>>> [1, 2, 3] # 리스트로 변환
l1[0]
>>> 1

t1 = tuple(s1)
t1
>>> (1, 2, 3) # 튜플로 변환
t1[0]
>>> 1
s1 = set([1, 2, 3, 4, 5, 6])
s1 = set([4, 5, 6, 7, 8, 9])

# 교집합
s1 & s2 # = s1.intersection(s2) = s2.intersection(s1)
>>> {4, 5, 6}

# 합집합
s1 | s2 # = s1.union(s2) = s2.union(s1)
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9}

# 차집합
s1 - s2 # = s1.difference(s2)
>>> {1, 2, 3}
s2 - s1 # = s2.difference(s1)
>>> {7, 8, 9}

 

집합 자료형 관련 함수

# 값 1개 추가하기 (add)
s1 = set([1, 2, 3])
s1.add(4)
s1
>>> {1, 2, 3, 4}

# 값 여러 개 추가하기 (update)
s1 = ([1, 2, 3])
s1.update([4, 5, 6])
s1
>>> {1, 2, 3, 4, 5, 6}

# 특정 값 제거하기 (remove)
s1 = ([1, 2, 3])
s1.remove(2)
s1
>>> {1, 3}
01장 ~ 02-2 (p.16 ~ p.71)

 

점프 투 파이썬으로 파이썬 공부를 시작했다. 작심 3일로 끝나지 말아야 한다..

 

이러면 안된다..

파이썬은 인간 친화적이고 간결한 특성 덕분에 공동작업과 유지 보수가 용이해서 최근에 점점 개발하는 업체와 사용자 수가 증가하고 있다. 나중에는 다른 언어들에게 밀릴 수도 있겠지만 현재로서는 가장 각광받고 있는 언어임에는 틀림없는 것 같다.(출처 : IT WORLD) 구글에서 만든 소프트웨어의 50% 이상이 파이썬으로 제작되었다는 말도 있을 정도다.

파이썬이 배우기 쉬운 편인 것도 있지만 이런 이유들 때문에 입문 언어로 파이썬을 선택한 점도 있다.

 

블로그에는 챕터별 주제와 공부한 내용 중에서 중요하거나 헷갈리는 부분을 기록할 것이다.

 


 

1장 : 파이썬이란 무엇인가?

 

1장은 본격적인 공부 전, 파이썬이 무엇인지에 대해서와 개발 환경 구축에 대해 설명하는 내용으로 구성되어 있었다.

파이썬의 특징과 장단점을 소개한 후 파이썬의 설치 방법과 사용자가 입력한 코드를 실행하는 환경인 인터프리터의 실행 방법, 인터프리터로 간단한 기초 문법 실습, 끝으로는 인터프리터로 작성하기에는 불편한 여러 줄의 복잡한 소스 코드를 작성할 때 사용하는 여러 가지 에디터에 대한 소개와 설명으로 이루어졌다. 그중에서 나는 가장 깔끔하고 편리해 보이는 '비주얼 스튜디오 코드(VSCode)'를 사용할 것이다.

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

 

 

 

2장 : 자료형

 

2장부터는 본격적으로 기본 문법들을 배우는데 그중에서도 가장 기초라고 할 수 있는 자료형을 배웠다.

 

 

02-1 숫자형

 

숫자 형태로 이루어진 자료형으로, 아래와 같이 정수형, 실수형과 드물게 사용되는 8진수형, 16 진수형 같은 것도 존재한다.

#숫자형 기본
a = 123
b = -3.45
c = 4.24e-10 # = 4.24*10^10(컴퓨터식 지수표현 방식)
d = 0o177 # 8진수형
e = 0x8ff # 16진수형

#사칙연산
a + b # 덧셈
a - b # 뺄셈
a * b # 곱셈
a / b # 나눗셈
a ** b # 제곱
a % b  # 나눗셈 후 나머지 반환
a // b # 나눗셈 후 몫 반환

 

 

02-2 문자열 자료형

 

문자열이란 문자, 단어 등으로 구성된 문자들의 집합.

# 문자열의 예
a = "Life is too short, You need Python"
"b"
"123" # 숫자형 같지만 따옴표로 둘러싸여 있어서 문자열"
len(a) # 문자열 길이 구하기

여러 줄인 문자열을 변수에 대입하고 싶을 때는 '\n'을 삽입해서 줄 바꿈을 하거나 작은따옴표 3개(''') 또는 큰따옴표 3개(""")로 여러 줄의 문장을 감싸면 된다.

 

문자열 인덱싱 : 문자열 내의 각 문자의 위치 표시

문자열 슬라이싱 : 문자열 내에서 설정한 범위만큼 뽑아내기

# 문자열 인덱싱
a = "Life is too short, You need Python"
i = a[-1]  # (마이너스가 붙으면 뒤에서부터)
>>> 'n'

# 문자열 슬라이싱
s = a[0] + a[1] + a[2] + a[3]
>>> 'Life' 
s2 = a[0:4] # = 0 <= a < 4
>>> 'Life'

 

문자열 포매팅 : 문자열 안에 어떤 값을 삽입하는 방법

# 문자열 포매팅
"I eat %d apples." % 3
>>> 'I eat 3 apples.'

"I eat %s apples." % "five"
>>> 'I eat five apples.'

number = 10
day = "three"
"I ate %d apples. so I was sick for %s days." % (number, day)
>>> 'I ate 10 apples. so I was sick for three days.'
# 정렬과 공백
"%10s" % "hi"
>>> '        hi'
"%-10sjane" % 'hi'
>>> 'hi        jane'

# 소수점 표현
"%10.4f" % 3.42134234
>>> '     3.4213'
# format 함수 사용
"I eat {0} apples".format(3)
>>> 'I eat 3 apples'

"I eat {0} apples".format("five")
>>> 'I eat five apples'

number = 10
day = "three"
"I ate {0} apples. so I was sick for {1} days.".format(number, day)
>>> 'I ate 10 apples. so I was sick for three days.'

"I ate {number} apples. so I was sick for {day} days.".fotmat(number=10, day=3)
>>> 'I ate 10 apples. so I was sick for 3 days.'

"{0:<10}".format("hi")
>>> 'hi        ' # 왼쪽 정렬
"{0:>10}".format("hi")
>>> '        hi' # 오른쪽 정렬
"{0:^10}".format("hi")
>>> '    hi    ' # 가운데 정렬
"{0:=^10}".format("hi")
>>> '====hi====' # 공백 채우기
y = 3.42134234
"{0:0.4f}".format(y)
>>> '3.4213'
# f 문자열 포매팅 (파이썬 3.6 버전부터 사용 가능)
name = '홍길동'
age = 30
f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
>>> '나의 이름은 홍길동입니다. 나이는 30입니다.'

f'{"hi":<10}'
>>> 'hi        ' # 왼쪽 정렬
f'{"hi":>10}'
>>> '        hi' # 오른쪽 정렬
f'{"hi":^10}'
>>> '    hi    ' # 가운데 정렬
f'{"hi":=^10}'
>>> '====hi====' # 공백 채우기
y = 3.42134234
f'{y:0.4f}'
>>> '3.4213' # 소수점

 

문자열 관련 함수

# 문자 수 세기 (count)
a = "hobby"
a.count('b')
>>> 2

# 위치 알려주기1 (find)
a = "Python is the best choice"
a.find('b')
>>> 14
a.find('k')
>>> -1 # (존재하지 않으면 -1)

# 위치 알려주기2 (index)
a = "Life is too short"
a.index('t')
>>> 8
a.index('k')
>>> 오류 반환

# 문자열 삽입 (join)
",".join('adcd')
>>> 'a,b,c,d'

# 소문자를 대문자로 바꾸기 (upper)
a = "hi"
a.upper()
>>> 'HI'

# 대문자를 소문자로 바꾸기 (lower)
a = "HI"
a.lower()
>>> 'hi'

# 왼쪽 공백 지우기 (lstrip)
a = " hi "
a.lstrip()
>>> 'hi '

# 오른쪽 공백 지우기 (rstrip)
a = " hi "
a.rstrip()
>>> ' hi'

# 양쪽 공백 지우기 (strip)
a = " hi "
a.strip()
>>> 'hi'

# 문자열 바꾸기 (replace)
a = "Life is too short"
a.replace("Life", "Your leg")
>>> 'Your leg is too short'

# 문자열 나누기 (split)
a = "Life is too short"
a.split()
>>> ['Life', 'is', 'too', 'short'] # 공백을 기준으로 나눔
b = "a:b:c:d"
b.split(':')
>>> ['a', 'b', 'c', 'd'] # : 기호를 기준으로 나눔

개발자로 진로를 정하고 개발 공부의 첫 단추를 끼우기 위해, 인공지능 교육 때 사용했던  파이썬을  첫 개발 공부 언어로 정했다. 이 글은 나의 블로그 첫 게시글이다.

 

최근에 가장 많이 쓰이는 언어가 파이썬이기도 하고,  다른 언어들에 비해 배우기가 쉬운 편에 속해서 프로그래밍에 익숙해질 겸 파이썬을 공부하기로 결정했다.

이것이 옳은 판단인지는 아직 잘 모르겠지만 계속 고민만 하는 것보다는 일단 개발 언어를 하나 정하고 공부해보면서 나에게 익숙한 공부법도 찾고, 조금이라도 코드 작성의 감을 익히는 것이 이번 파이썬 공부의 목표이다.

어차피 개발을 하면서 '파이썬' 하나의 언어만 사용하는 것은 어렵기 때문에 처음 개발 공부를 할 때 어떤 언어를 공부할 지에 대해서는 심각하게 고민하지 않아도 된다고 생각한다.

 


 

[Do it! 점프 투 파이썬] - '30일 진도표를 15일로'

 

1일 차 : 01장 ~ 02-2 (p.16 ~ p.71)

 

2일 차 : 02-3 ~ 02-6 (p.72 ~ p.101)

 

3일 차 : 02-7 ~ 02-8 (p.102 ~ p.111)

 

4일 차 : 02장 연습문제 ~ 03-1 (p.112 ~ p.129)

 

5일 차 : 03-2 ~ 03-3 (p.130 ~ p.145)

 

6일 차 : 03장 연습문제 ~ 04-1 (p.146 ~ p.167)

 

7일 차 : 04-2 ~ 04-3 (p.168 ~ p.178)

 

8일 차 : 04장 연습문제 ~ 05~1 (p.179 ~ p.206)

 

9일 차 : 05-2 ~ 05-3 (p.207 ~ p.221)

 

10일 차 : 05-4 ~ 05-5 (p.222 ~ p.246)

 

11일 차 : 05-6 ~ 05장 연습문제 (p.247 ~ p.265)

 

12일 차 : 첫째 마당 복습 ~ 06-3 (p.266 ~ p.277)

 

13일 차 : 06-4 ~ 07-1 (p.278 ~ p.292)

 

14일 차 : 07-2 ~ 07-3 (p.293 ~ p.320)

 

15일 차 : 둘째 마당 복습 ~ 코딩 면허 시험 (p.321 ~ p.329)

+ Recent posts