혼공파 3주차! 열심히 공부하다 보니 벌써 3주차 게시물을 올릴 때가 되었네요ㅎㅎ

벌써 절반 공부했다니 뿌듯합니다. 😊😊

점점 많아지는 양이 걱정되긴 하지만... 완주까지 열심히 달려 보겠습니다! 👻


Chapter 04. 반복문

[기본 미션 : 리스트, 딕셔너리, 범위 자료형에 대해 이해한 내용을 바탕으로 포스팅하기]

 

[리스트]

 

✏️ 리스트 : 여러 가지 자료를 저장할 수 있는 자료

★ 이전 장에서 활용한 숫자,문자 등은 '개별적인 자료' 이며, 리스트는 이러한 자료들을 모아서 사용할 수 있게 해주는 '특별한 형태의 자료' 이다.

 

✏️ 리스트 생성 방법

  ✔️ 대괄호 [ ] 안에 자료를 쉼표 ( , ) 로 구분해서 입력하여 리스트를 생성한다. 대괄호 내부에 넣는 자료를 요소 (Element) 라고 한다. 리스트는 N개의 자료형으로 구성할 수 있다. (1개 ~ N개)

# 리스트 생성 방법
list = [요소, 요소, 요소, ... ]

 

✏️ 리스트 인덱스

  ✔️ 리스트 안에 있는 요소를 각각 사용하려면 리스트 이름 바로 뒤에 대괄호 [ ] 를 입력하고, 그 안에 선택한 요소의 위치를 나타내는 숫자를 입력한다. 이 숫자를 인덱스(index) 라고 한다.

파이썬의 인덱스는 0부터 시작하기 때문에 각각의 요소는 다음과 같은 형태로 저장된다.

list_a = [1, 2, 3, 4, 5]

✏️ 리스트 사용법

  ✔️ 리스트의 특정 요소를 변경할 수 있다.

리스트명[인덱스 번호] = "바꿀 값"
list_a = [1,2,3]
# list_a의 첫번째 요소를 "change" 로 변경
list_a[0] = "change"
print(list_a)  # ['change', 2, 3]

 

  ✔️ 파이썬의 인덱스 값은 양수와 음수를 모두 사용할 수 있으며, 음수로 입력할 경우 리스트의 끝부분 부터 탐색한다. 인덱스 -1의 경우 가장 마지막 요소를 출력한다.

list_a = [1, 2, 3, 4, 5]

 

  ✔️ 리스트 접근 연산자는 이중으로 사용할 수 있다.

  ✔️ 리스트 안에 리스트를 사용할 수 있다.

list_a = [1,2,3,"test",True,False]

# list_a의 3번째 인덱스 "test" 출력
print(list_a[3])	# test

# 'test' 문자열의 첫번째 요소 't' 출력
print(list_a[3][0])

# 리스트 안에 리스트를 사용할 수 있다.
list_b = [ [1,2,3], [4,5,6], [7,8,9] ]

print(list_b[0]) # [1, 2, 3]
print(list_b[1]) # [4, 5, 6]
print(list_b[2]) # [7, 8, 9]

print(list_b[0][2]) # 3

[리스트의 연산]

 

✏️ 문자열에 적용할 수 있는 연산자는 리스트에서도 활용이 가능하다.

  ✔️ 연결 ( + ) , 반복 ( * ) , len()

list_a = [1,2,3]
list_b = [4,5,6]

# 연결 연산자 ( + ) 를 사용해서 list_a 와 list_b의 자료를 연결한다.
print(list_a+list_b) # [1, 2, 3, 4, 5, 6]

# 반복 연산자 ( * ) 를 사용해서 list_a의 자료를 3번 반복한다.
print(list_a * 3)    # [1, 2, 3, 1, 2, 3, 1, 2, 3]

# len(리스트) 는 리스트에 저장된 요소의 개수를 세어 준다.
print(len(list_a))   # 3

 

[리스트에 요소 추가하기]

 

✏️ append() : 리스트 뒤에 요소를 추가한다.

✏️ insert() : 리스트의 지정한 위치에 요소를 추가한다.

✏️ extend() : 한 번에 여러 요소를 추가할 때 사용하며, 매개변수로 리스트를 입력한다. 원래 리스트 뒤에 새로운 리스트의 요소를 모두 추가한다.

# 리스트 뒤에 요소 추가
리스트명.append(요소)

# 리스트 중간에 요소 추가
리스트명.insert(위치, 요소)

# 한 번에 여러 요소 추가
리스트명.extend( [ 리스트] )
# 리스트 선언
list_a = [1,2,3]

# 리스트 뒤에 요소 추가
list_a.append(4)
print(list_a) # [1, 2, 3, 4]

# 리스트 중간에 요소 추가
# 인덱스 '0' 위치에 '10' 추가
list_a.insert(0,10)
print(list_a) # [10, 1, 2, 3, 4]

# 한 번에 여러 요소 추가
list_a.extend([5,6,7])
print(list_a) # [10, 1, 2, 3, 4, 5, 6, 7]

★ 리스트 연결 연산자를 사용하는 경우 원본 리스트에 변화가 없으나 (비파괴적 처리) extend() 함수 사용 시 원본 리스트가 변경된다. (파괴적 처리)

 

[리스트에서 요소 제거하기]

 

✏️ 인덱스로 제거 : 매개변수로 주어진 인덱스 위치에 있는 요소를 제거한다.

# del 키워드 사용
del 리스트명[인덱스]

# pop() 사용
리스트명.pop(인덱스)

★ pop() 은 매개변수를 입력하지 않으면 -1 로 간주하여, 마지막 요소가 제거된다.

 

✏️ 값으로 제거 : 리스트 내부에 저장된 값을 지정해서 제거한다.

# remove() 사용
리스트.remove()

★ remove() 는 매개변수로 받은 값이 리스트 내부에 여러 개 있어도 가장 먼저 발견되는 것 하나만 제거한다!

# 리스트 선언
list_a = [1,2,3,4,5,6,7,8,9]

# 0번째 인덱스 요소 삭제
list_a.pop(0)
print(list_a)	# [2, 3, 4, 5, 6, 7, 8, 9]

# 매개변수를 입력하지 않았으므로 -1 로 간주하여 마지막 요소 삭제
list_a.pop()
print(list_a)	# [2, 3, 4, 5, 6, 7, 8]

# 2번째 인덱스 요소 삭제
del list_a[2]
print(list_a)	# [2, 3, 5, 6, 7, 8]

# 값 '3' 삭제
list_a.remove(3)
print(list_a)	# [2, 5, 6, 7, 8]

 

[리스트 슬라이싱]

 

✏️ [ : ] 연산자로 리스트 범위를 지정하여 여러 요소를 선택할 수 있다. 

마지막 위치에 '단계'를 추가하여 지정한 숫자만큼 인덱스를 건너 뛰면서 요소를 가져올 수 있다.

단계는 기본값이 1이므로, 인덱스를 건너뛰어야 하는 경우가 아니면 생략 가능하다.

리스트[시작 인덱스 : 끝 인덱스 : 단계]
# 리스트 선언
num = [1,2,3,4,5,6,7,8]

# num 리스트의 첫번째 인덱스 부터 4번째 인덱스 까지 출력하는데, 2씩 건너뛴다.
print(num[0:5:2])	#[1, 3, 5]

 

[clear() / sort() 함수]

 

✏️ 리스트 내부의 요소를 모두 제거할 때는 clear() 함수를 사용하며, 정렬 시에는 sort() 함수를 사용한다. sort() 는 기본 오름차순 정렬이다.

# clear()
리스트.clear()

# sort()
리스트.sort()

 

[in / not in 연산자]

 

✏️ 특정 값이 리스트 내부에 있는 지 확인하려면 in 연산자를 사용한다.

리스트 내부에 값이 있으면 True , 없으면 False를 출력한다.

# 사용법
in 리스트

 

✏️ 특정 값이 리스트 내부에 없는 지 확인할 때는 not in 연산자를 사용한다. (in 연산자와 반대로 동작한다.)

# 사용법
not in 리스트
# 리스트 선언
list_a = [1,2,3,4,5]

# list_a 에 1 이 있으므로 True
print(1 in list_a)	# True

# list_a에 6이 없으므로 False
print(6 in list_a)	# False

# list_a 에 1 이 있으므로 False
print(1 not in list_a)	# False

# list_a에 6이 없으므로 True
print(6 not in list_a)	# True

 

[전개 연산자]

 

✏️ 리스트 내용을 전개해서 입력할 수 있는 연산자. 리스트 앞에 * 기호를 사용하여 작성한다.

전개 연산자는 기본적으로 리스트 내부 , 함수의 매개변수에 사용한다.

a = [1,2,3]

# 리스트 내부에 전개 연산자 사용 가능.
# *a 는 [1,2,3] 로 전개해서 입력한 것과 같은 효과를 낸다.
b = [*a, *a]
print(b) 	# [1, 2, 3, 1, 2, 3]

# 함수 매개변수에 전개 연산자 사용 가능.
# print(1,2,3,1,2,3) 처럼 동작한다.
print(*b)	# 1 2 3 1 2 3

[딕셔너리]

 

✏️ 딕셔너리 : 키(key) 를 기반으로 값(value) 을 저장하는 것

      ✔️ 키는 딕셔너리 내부에서 값에 접근할 때 사용하며, 값은 딕셔너리 내부에 있는 각각의 내용이다.

✏️ 중괄호 {} 로 선언하며, 키:값 형태를 쉼표(,) 로 연결해서 생성한다.

변수 = {
         키 : 값,
         키 : 값,
...
         키 : 값
}
# 딕셔너리 선언
dict_a = {
    "name": "kim", # 문자열을 키로 사용
    "age" : 20,
    1 : 30,        # 숫자를 키로 사용
    False: 10       # bool 값을 키로 사용
}

# 딕셔너리 출력
print(dict_a)
>> {'name': 'kim', 'age': 20, 1: 30, False: 10}

# 빈 딕셔너리 선언
dict_b = {}

 

딕셔너리의 키를 문자열로 사용 시 따옴표 (" ") 를 붙여야 한다.

 

[딕셔너리 요소에 접근하기]

 

 딕셔너리를 선언할 때는 { } 를 사용하지만, 요소에 접근할 때는 딕셔너리 뒤에 [ ] 를 입력하고 괄호 내부에 인덱스처럼 키를 입력한다.

✏️ 딕셔너리 내부에는 문자열, 숫자, bool, 리스트, 딕셔너리 등 다양한 자료를 넣을 수 있다.

# 딕셔너리 선언
dict_a = {
    "name" : "포카칩",
    "price" : 1500,
    "store" : ["편의점", "대형마트", "슈퍼"],
    "flavor" : "original"
}

print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'original'}

print(dict_a["name"])
>> 포카칩

print(dict_a["store"])
>> ['편의점', '대형마트', '슈퍼']

# 인덱스를 지정하여 딕셔너리 안의 리스트에 대한 특정 값을 출력할 수 있다.
print(dict_a["store"][0])
>> 편의점

 

[딕셔너리에 값 추가/제거]

 

✏️ 딕셔너리에 값을 추가할 때는 키를 기반으로 입력한다.

딕셔너리[새로운 키] = 새로운 값

# 딕셔너리에 이미 존재하는 키를 지정하고 값을 넣으면 기존의 값을 새로운 값으로 변경한다.
딕셔너리[기존 키] = 새로운 값

 

✏️ 딕셔너리에 값을 제거할 때는 del 키워드를 사용한다.

# 해당 키와 요소 제거
del dict_a[]

 

# 딕셔너리 선언
dict_a = {
    "name" : "포카칩",
    "price" : 1500,
    "store" : ["편의점", "대형마트", "슈퍼"],
    "flavor" : "original"
}

# 딕셔너리 값 추가
dict_a["manufacturer"]="오리온"
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'original', 'manufacturer': '오리온'}

# 딕셔너리 값 변경
dict_a["flavor"]="onion"
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'onion', 'manufacturer': '오리온'}

# 딕셔너리 값 삭제
del dict_a["manufacturer"]
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'onion'}

 

[딕셔너리에 값이 있는 지 확인]

 

✏️ in 키워드

  ✔️ 딕셔너리 내부에 키가 있는지 확인할 때 in 키워드를 사용할 수 있다.

 

✏️ get() 함수

  ✔️ get() 은 딕셔너리의 키로 값을 추출하는 함수인데, 존재하지 않는 키에 접근할 경우 None 을 출력한다.

 

# 딕셔너리 선언
dict_a = {
    "name" : "포카칩",
    "price" : 1500,
    "store" : ["편의점", "대형마트", "슈퍼"],
    "flavor" : "original",
    "manufacturer" : "오리온"
}

# 키가 존재하는지 확인 : in 연산자 사용
if "name" in dict_a:
    print(dict_a["name"])

>> 포카칩

# 존재하지 않는 경우
if "test" in dict_a:
    print(dict_a["test"])
else:
    print("존재하지 않는 키입니다.")
    
>> 존재하지 않는 키입니다.

# 키가 존재하는지 확인 : get() 사용
value = dict_a.get("name")

if value == None:
    print("존재하지 않는 키입니다.")
else:
    print(value)

>> 포카칩

# 키가 존재하지 않는 경우 : value 값이 None
value = dict_a.get("test")

# value 값이 None인지 확인
if value == None:
    print("존재하지 않는 키입니다.")
else:
    print(value)    

>> 존재하지 않는 키입니다.

 

★ 리스트와 딕셔너리 비교

  리스트 딕셔너리
의미 인덱스를 기반으로 값을 저장함 키를 기반으로 값을 저장함
가리키는 위치 인덱스
선언 형식 변수=[] 변수={}
값 사용 방식 list_a[1] dict_a["name"]
값 추가 방식 list_a.append(5) list_a["age"]=20
list_a.insert(1, 5)
값 제거 방식 del list_a[1] del dict_a["name"]
list_a.pop(1)

[범위 자료형]

 

✏️ 범위(range) : 정수의 범위를 나타내는 값으로, 특정한 횟수 만큼 반복해서 돌리고 싶을 경우 for 반복문과 범위를 조합해서 사용한다. range() 함수를 사용하여 범위를 만들 수 있다.

 

[range() 사용법]

1️⃣ 매개변수에 숫자 한 개 입력

# 0부터 N-1 까지의 정수로 범위 생성
range(N)

 

2️⃣ 매개변수에 숫자 두 개 입력

# N 부터 M-1 까지의 정수로 범위 생성
range(N,M)

 

3️⃣ 매개변수에 숫자 세 개 입력

# N 부터 M-1 까지의 정수로 범위 생성, 앞 뒤 숫자가 C 만큼의 간격이 있다.
range(N,M,C)

 

# 범위 선언
range_a = range(5)	# 1번 방법, 0부터 4까지 정수로 범위 생성
range_b = range(1,5)	# 2번 방법, 1부터 4까지 정수로 범위 생성
range_c = range(1,10,2)	# 3번 방법, 1부터 2씩 증가하면서 9까지 정수로 범위 생성

# 범위를 리스트로 변경하여 범위 내부에 어떤 값이 들어있는 지 확인 가능하다. 
print(list(range_a))
>> [0, 1, 2, 3, 4]
print(list(range_b))
>> [1, 2, 3, 4]
print(list(range_c))
>> [1, 3, 5, 7, 9]

 

★ 범위 생성 시 매개변수로 무조건 정수를 입력해야 한다.

n = 10
a = range( 0, int( n / 2 ) ) # n/2 의 결과 값인 실수를 정수로 바꿔주거나
a = range( 0, n // 2 )     # 정수 나누기 연산자를 사용해서 몫만 가져온다!

 


[반복문]

 

특정 코드를 반복해서 실행할 때 사용하는 구문.

 

[for 반복문]

 

✏️ 딕셔너리 , 리스트, 범위 자료형 등과 함께 사용된다.

# for 반복문의 기본적인 형태

for 반복자 in 반복할 수 있는 것:    # 반복할 수 있는 것에는 문자열, 리스트, 딕셔너리, 범위 등이 있다.
     코드

 

list_a = [1,2,3,4,5]

# list_a 에 있는 요소 하나 하나가 element 변수 안에 들어간다
# 리스트의 요소를 차례차례 출력
for element in list_a:
    print(element)
 
# 출력
1
2
3
4
5

 

✏️ 딕셔너리와 for 반복문 사용하기

딕셔너리 내부에 있는 키가 변수에 들어간다는 점에 유의한다!

for 키 변수 in 딕셔너리:
    코드
dict_a = {
    "name" : "포카칩",
    "price" : 1500,
    "store" : ["편의점", "대형마트", "슈퍼"],
    "flavor" : "original",
    "manufacturer" : "오리온"
}

for key in dict_a:
    print(key ,":", dict_a[key])

[출력]
name : 포카칩
price : 1500
store : ['편의점', '대형마트', '슈퍼']
flavor : original
manufacturer : 오리온

 

✏️ 범위 자료형과 for 반복문 사용하기

for 숫자 변수 in 범위:
     코드
# 기본적인 범위 자료형과 for 반복문 조합
for i in range(5):
    print(i)

[출력]
0
1
2
3
4


# 리스트와 범위를 조합해서 사용 가능
# 현재 몇번째 요소를 출력하는지 알 수 있다.
array = [1,2,3,4,5]
for i in range(len(array)):
    print("{} 번째 요소 {}".format(i, array[i]))

[출력]
0 번째 요소 1
1 번째 요소 2
2 번째 요소 3
3 번째 요소 4
4 번째 요소 5

 

[while 반복문]

 

✏️ 조건을 활용해서 반복할 때 사용한다. for 반복문은 특정 코드를 N번 반복하며, while 반복문은 <불 표현식> 이 참인 동안 문장을 계속 반복한다.

while 불 표현식:
      문장

# 무한루프
while True:
      문장
i = 0
# i < 5 를 만족하는 동안만 실행한다.
while i < 5:
    print("{} 번째 반복입니다.".format(i))
    i += 1

[출력]
0 번째 반복입니다.
1 번째 반복입니다.
2 번째 반복입니다.
3 번째 반복입니다.
4 번째 반복입니다.

 

✏️ break 키워드는 반복문을 벗어날 때 사용하는 키워드이다.

# break 사용 예시
i = 0
# 무한루프
while True:
    print("i 의 값 : {}".format(i))
    # i 값 1씩 증가
    i += 1
    # i 값이 5보다 커지면 반복문 종료
    if i > 5:
        print("무한루프 종료")
        break
        
[출력]
i 의 값 : 0
i 의 값 : 1
i 의 값 : 2
i 의 값 : 3
i 의 값 : 4
i 의 값 : 5
무한루프 종료

 

✏️ continue 키워드는 현재 반복을 생략하고 다음 반복으로 넘어갈 때 사용하는 키워드이다.

# continue 사용 예시
list_a = [10,4,20,1,15,9,30]

for item in list_a:
	# item 이 10보다 작으면 다음 반복으로 넘어간다.
    if item < 10:
        continue
    print(item)

[출력]
10
20
15
30

[선택 미션 : p.213 쪽의 1번 문제의 답 쓰고 인증하기]

✔️ list의 extend 함수는 리스트 뒤에 매개변수로 받은 리스트 요소를 모두 추가해 준다.

✔️ list의 append 함수는 리스트 뒤에 매개변수로 받은 요소를 추가한다.

✔️ list의 insert 함수는 첫 번째 매개변수로 위치, 두 번째 매개변수로 요소를 받는다. 따라서 위 예제에서는 list_a의 3번째 인덱스에 '0' 을 추가해 준다.

✔️ list의 remove 함수는 매개변수로 받은 요소를 제거한다. 매개변수로 받은 값이 리스트 내에 여러 개 있어도 처음 발견하는 하나만 제거한다.

✔️ list의 pop 함수는 매개변수로 받은 인덱스 위치의 요소를 제거한다.

✔️ list의 clear 함수는 리스트 내부의 요소를 모두 제거한다.

Chapter 03. 조건문

[불 자료형과 if 조건문]

 

✏️ Bool 자료형 : 파이썬의 기본 자료형으로, True (참) / 거짓 (False) 을 나타내는 값. 비교 연산자를 통해 얻을 수 있다.

 

[비교 연산자의 종류]

연산자 설명 연산자 설명
== 같다 > 크다
!= 다르다 <= 작거나 같다
< 작다 >= 크거나 같다

 

✏️ 숫자 또는 문자열에 비교 연산자를 적용하여 참/거짓을 출력할 수 있다.

  • 한글 비교는 사전 순서 (가나다 순) 로 앞에 있는 것이 작은 값을 갖는다.
  • 영어 비교는 알파벳 순으로 비교한다. 같은 단어라도 대소문자가 다르면 다른 문자열로 판단한다.
# 10과 100은 다르므로 False
print (10 == 100)

# 10은 100보다 작으므로 True
print (10 < 100)

# 10과 100은 다르므로 True
print( 10 != 100)

# 10은 100보다 작으므로 False
print (10 >= 100)
False

# "가방" 과 가방은 같은 단어이므로 True
print("가방" == "가방")

# "ㄱ" 이 "ㅎ"보다 앞에 있으므로 True
print("가방" < "하마")

# "ㄱ" 이 "ㅎ"보다 앞에 있으므로 False
print("가방" > "하마")

# "a" 가 "b" 보다 알파벳 순서상 앞이므로 True
print("apple" < "banana")

# "a" 가 "b" 보다 알파벳 순서상 앞이므로 True
print("apple" > "banana")

# 같은 단어이지만 "p" 가 소문자/대문자인 차이가 있으므로 False
print("python" == "Python")

 

★ bool 끼리는 논리 연산자를 사용할 수 있다.

[논리 연산자의 종류]

연산자  사용 예 의미 설명
not not A 아니다 (부정) A 의 값을 반대로 전환한다. (A가 True면 False로, False면 True 로)
and A and B 그리고 A 와 B가 모두 참일 때만 True를 출력하며, 그 외는 모두 False를 출력한다.
or A or B 또는 A 와 B 둘 중 하나라도 참이면 True 를 출력하며, A와 B가 모두 거짓일 때만 False를 출력한다.

 

x = 10
under_20 = x < 20
print(under_20)		# True
print(not under_20)	# False

print(True and True)	# True
print(True and False)	# False
print(False and True)	# False
print(False and False)	# False

print(True or True)	# True
print(True or False)	# True
print(False or True)	# True
print(False or False)	# False

✏️ if 조건문 : 조건에 따라 코드를 실행하거나, 실행하지 않게 만들고 싶을 때 사용한다.

# 사용 예

if bool 값이 나오는 표현식:  # if 조건문 뒤에 콜론( : )을 붙여준다.
    True일 때 수행할 문장1   # if 문 아래 문장은 4칸 들여쓰기 후 입력한다.
    True일 때 수행할 문장2
x = 10
if x > 0:
    print("양수입니다")  # 양수입니다 출력
    
if x < 0:
    print("음수입니다")  # 거짓이므로 아무 값도 출력되지 않는다.

 

✏️ if ~ else 구문 : if 조건문 뒤에 else 구문을 사용하여, if 조건문의 값이 False인 경우 else 구문 값을 실행한다.

# 사용 예

if 조건:
    True일 경우 실행할 문장
else:
    False일 경우 실행할 문장
number = int(input("정수 입력> ")) # 정수 입력> 13

if number % 2 == 0:
	# number % 2 가 0인 경우 (True) "짝수입니다" 출력
    print("짝수입니다")
else:
	# number % 2 가 0이 아닌 경우 (False) "홀수입니다" 출력
    # 13은 홀수이므로 이 문장 실행
    print("홀수입니다")

 

✏️ elif 구문 : 조건이 두 가지 만으로 구분되지 않는 경우, if ~ elif ~ else 구문을 사용하여 여러 조건에 대한 분기를 수행

# 사용 예

if 조건 A:
    조건 A 가 True일 경우 실행할 문장
elif 조건 B:
    조건 B가 True일 경우 실행할 문장
elif 조건 C:
    조건 C가 True일 경우 실행할 문장
else:
    조건 A,B,C에 걸리지 않는 경우 ( 모든 조건이 False인 경우) 실행할 문장

 

# 날짜/시간과 관련된 기능을 가져온다
import datetime

# 현재 날짜 시간을 구한다
now = datetime.datetime.now()
# 비교할 수 있도록 월 정보를 month 변수에 저장한다.
month = now.month

# 조건문으로 현재 계절을 확인한다.
if 3 <= month <= 5:
    print("봄입니다")
elif 6 <= month <= 8:
    print("여름입니다")
elif 9 <= month <= 11:
    print("가을입니다")
else:
    print("겨울입니다")
# 파이썬 조건문을 효율적으로 구성하기
# 점수를 입력 받아 학점을 계산해 주는 프로그램

score = int(input("학점입력: "))

if score >= 90:
    print("A 학점")
# 위에서 score가 90보다 큰 지 검사했으므로 하위 값만 검사한다.
# 이 조건문은 80 =< score =< 90 과 같은 의미이다.
elif score >= 80:
    print("B 학점")
# 위에서 score가 90,80보다 큰 지 검사했으므로 하위 값만 검사한다.
# 70 <= score <= 80
elif score >= 70:
    print("C 학점")
# 위에서 score가 90,80,70보다 큰 지 검사했으므로 하위값만 검사한다.
# 60<= score <= 70
elif score >= 60:
    print("D 학점")
# 모든 조건식에 해당되지 않는 경우
else:
    print("F 학점")

 

✏️ False 로 변환되는 값 : if 조건문의 매개변수가 bool 값이 아닌 다른 값을 사용하는 경우 자동으로 이를 bool 값으로 변환해서 처리한다.

  • False로 변환되는 값 : None, 숫자 0, 0.0 , 빈 컨테이너 (빈 문자열, 빈 바이트열, 빈 리스트, 빈 튜플, 빈 딕셔너리 등)
  • True로 변환되는 값 : 그 외 나머지
# if 조건문에 0 넣기
if 0:
    print("0은 True 를 반환한다.")
else:
	# 조건문에 0이 들어오면 False를 반환하므로 else 구문이 실행된다.
    print("0은 False를 반환한다.")

# if 조건문에 빈 문자열 넣기
if "":
    print("빈 문자열을 True를 반환한다.")
else:
	# 조건문에 빈 문자열이 들어오면 False를 반환하므로 else 구문이 실행된다.
    print("빈 문자열은 False를 반환한다.")

 

✏️ pass 키워드 : 프로그래밍의 전체 골격을 잡아 두고, 내부에 처리할 내용은 나중에 만들고자 할 때 pass 키워드 입 


[2주차 기본 미션] 

사용자에게 태어난 연도를 입력받아 띠를 출력하는 프로그램 작성하기

 

- 소스 코드

 

- 출력 화면

 

지난 주 1주차 공부를 마친 후에, 갑자기 노트북이 버벅이더니 아예 맛이 가버려서...

그 동안 멘붕 그 자체였다.ㅠㅠ 공부도 계속 못하고...ㅠㅠㅠㅠ

급하게 새 노트북을 구매했는데, 이전 노트북에 있던 자료들은 어떻게 해야 할지 모르겠다...

평일에 노트북 이슈로 공부를 못했으니 주말에 빡세게 했다.ㅎㅎ

 


Chapter 02. 자료형

[변수와 입력]

 

✏️ 변수 : 값을 저장할 때 사용하는 식별자이며, 모든 자료형의 값을 저장할 수 있다.

변수를 사용하기 위해서는 ① 변수를 선언하고, ② 선언한 변수에 값을 할당해야 한다. 그 후 ③ 변수 안의 값을 사용할 수 있다.

 

✔️ 변수 선언 : 변수를 생성하는 것.
       - 파이썬에서 사용할 변수 이름을 적어 주면 변수를 선언할 수 있다.

 

✔️ 변수에 값 할당 : 생성한 변수에 값을 저장하는 것

       - 선언한 변수에 ' = ' 기호를 통해 값을 할당할 수 있다.  

 

✔️ 변수의 사용 ( = 변수 참조) : 생성한 변수에 있는 값을 사용한다.

# 변수의 선언 및 할당
# 변수 pi를 선언하고, 값 (3.14)을 할당한다.
pi = 3.14

# 변수의 사용
# 변수 pi에 저장한 값을 출력할 수 있다.
print(pi)	# 3.14

# 변수 pi에 저장된 값으로 연산한다.
pi + pi

 

 파이썬은 다른 프로그래밍 언어와는 다르게 변수에 자료형을 지정하지 않기 때문에 변수 선언 시 자료형을 선언할 필요가 없다.


[복합 대입 연산자의 사용]

 

✏️ 변수는 내부에 들어 있는 자료의 연산자를 사용할 수 있다.

✏️ 문자열이 할당된 경우 문자열 연산자를 사용할 수 있으며, 숫자가 할당된 경우 숫자 연산자를 사용할 수 있다.

✏️ 자료형의 기본 연산자와 '=' 연산자를 조합해서 사용할 수 있는 연산자이다.

예시 ) a += 10 은 a = a + 10 과 같다.

 

[숫자 자료형에 적용할 수 있는 복합 대입 연산자]

연산자 이름 설명
+= 숫자 덧셈 후 대입
-= 숫자 뺄셈 후 대입
*= 숫자 곱셈 후 대입
/= 숫자 나눗셈 후 대입
%= 숫자의 나머지를 구한 후 대입
**= 숫자 제곱 후 대입

 

number = 10
number += 10

print(number)	# 20

number -= 10
print(number)	# 10

number *= 2
print(number)	# 20

 

[문자 자료형에 적용할 수 있는 복합 대입 연산자]

연산자 이름 설명
+= 문자열 연결 후 대입
-= 문자열 반복 후 대입
string = "안녕하세요"
string += "!"

print(string)	# 안녕하세요!

string *=2
print(string)	# 안녕하세요!안녕하세요!

✏️ input( ) 함수 : 콘솔 창 (명령 프롬프트) 에서 사용자로부터 데이터를 입력받을 때 사용하는 함수이다.

input 함수 실행 시 콘솔 창에 사용자로부터 입력값이 들어올 때 까지 대기 상태가 된다. 값을 입력하고 엔터키를 누르면 다음 로직을 수행한다.

>>>> input("입력하세요")
입력하세요:

 

★ 사용자가 입력한 값은 input() 함수의 결과값이 된다. 이 값은 다른 변수에 할당해 사용할 수 있다.

>>>> string = input("인사말을 입력하세요: ")
인사말을 입력하세요: 안녕
>>>> print(string)
인사말을 입력하세요: 안녕

 

✏️ input() 함수의 입력 자료형 : input() 함수는 입력한 값을 무조건 문자열로 처리한다.

number = input("숫자를 입력하세요: ")
	# 숫자를 입력하세요: 123

print(number)	# 123
print(type(number))	# <class 'str'>

 

★ input() 함수로 숫자를 입력받는 경우, 입력받은 문자열을 숫자로 변환하는 작업이 필요하다. (캐스트 작업)

문자열을 숫자로 변환할 때는 다음 함수를 사용한다.

  • int() : 문자열을 정수형(int) 으로 변환한다.
  • float() : 문자열을 실수형(float) 으로 변환한다.

이와 반대로 숫자를 문자열로 변환할 때는 다음 함수를 사용한다.

  • str(숫자)
# input() 값을 입력받은 후, int 로 형변환하여 사용할 수 있다.
string_a = input("입력>")
int_a = int(string_a)
print(type(int_a))	# <class 'int'>

# 입력 받을 때 부터 int로 형변환하여 사용할 수 있다.
a = int(input("입력>"))
print(type(a))	# <class 'int'>

# 숫자 123을 string으로 형변환하여 사용할 수 있다.
int_b = str(123)
print(type(int_b)

[숫자와 문자열의 다양한 기능]

 

✏️ 문자열의 format() 함수

  • 숫자와 문자열을 다양한 형태로 출력할 수 있는 함수
  • 중괄호 { } 를 포함한 문자열 뒤에 마침표 (.) 를 찍고 format() 함수를 사용한다.
  • 중괄호 개수와 format() 함수 괄호 안 매개변수의 개수는 반드시 같아야 한다.
  • { } 기호를 format() 함수 안의 괄호 안에 있는 매개변수로 대체하는 것이기 때문에 { } 앞이나 뒤, { } 와 { } 사이에 다양한 문자열을 넣을 수 있다.
format_a = "{}".format(10)			# 10
format_b = "{} 만원".format(5000)	  # 5000 만원
format_c = "{} {} {}".format(300, 400, 500) # 300 400 500
  • format() 함수는 정수, 실수형도 지정해서 출력할 수 있다.
    • 정수형은 {:d} , 실수형은 {:f} 사용.
# 정수 출력
output_a = "{:d}".format(32)
# 음수 출력
output_b = "{:+d}".format(-32)
# 특정 칸 출력 
output_c = "{:5d}".format(11)
# 빈칸을 0으로 채우기
output_d = "{:05d}".format(11)

# 실수 출력
output_e = "{:f}".format(52.12)
# 음수 출력
output_f = "{:f}".format(-52.12)
# 소수점 아래 자릿수 지정
output_g = "{:.2f}".format(52.1234)
# 의미 없는 소수점(.0) 제거
output_h = "{:g}".format(52.0)

# 출력
32
-32
   11
00011
52.120000
-52.120000
52.12
52

 

✏️ 대소문자 변환 : upper(), lower()

  • upper() : 문자열의 알파벳을 대문자로 변경
  • lower() : 문자열의 알파벳을 소문자로 변경
a = "Hello World"
# a에 저장된 문자열을 모두 대문자로
print(a.upper())	# HELLO WORLD
# a에 저장된 문자열을 모두 소문자로
print(a.lower())	# hello world

 

✏️ 문자열 공백 제거 : strip()

  • strip() : 문자열 양 옆의 공백을 제거 (이 때 공백은 띄어쓰기, 탭, 줄바꿈 모두 포함)
  • lstrip() : 문자열 왼쪽의 공백을 제거
  • rstrip() : 문자열 오른쪽의 공백을 제거
input_a = """
        안녕하세요, 반갑습니다
"""
print(input_a)
print(input_a.strip())
# 출력
        안녕하세요, 반갑습니다

안녕하세요, 반갑습니다

 

✏️ 문자열 구성 파악 함수 : isXXX()

  • 문자열의 구성을 파악할 때는 is로 시작하는 함수를 사용한다. 예를 들어서 문자열이 알파벳으로만 구성되어 있는지, 숫자로만 구성되어 있는지, 소문자로만 구성되어 있는지 등을 확인할 때 유용하다. 출력은 True / False 를 반환한다.
    • isalnum() : 문자열이 알파벳 또는 숫자로 구성되어 있는 지 확인
    • isalpha() : 문자열이 알파벳으로만 구성되어 있는 지 확인
    • isdigit() : 문자열이 숫자로 인식될 수 있는지 확인

✏️ 문자열 찾기 함수 : find()

  • 문자열 내부에 특정 문자가 어디 위치하는 지 확인하기 위해 find() 함수와 rfind() 함수를 사용한다.
  • find() : 문자열의 왼쪽부터 찾아서 처음 등장하는 위치 반환
  • rfind() : 문자열의 오른쪽부터 찾아서 처음 등장하는 위치 반환
output_a = "안녕안녕하세요".find("안녕")	# 0
output_b = "안녕안녕하세요".rfind("안녕")	# 2

 

✏️ in 연산자

  • 문자열 내부에 어떤 문자열이 있는 지 확인하려면 in 연산자를 사용한다.
  • 문자열이 있으면 True , 없으면 False를 리턴한다.
print("안녕" in "안녕하세요")	# True
print("잘자" in "안녕하세요")	# False

 

✏️ 문자열 자르기 : split()

  • split() 함수를 사용해서 문자열을 특정 문자로 자를 수 있다.
# 문자열 a 를 공백을 기준으로 자른다.
a = "10 9 8 7 6 5 4 3 2 1".split(" ")

print(a)
['10', '9', '8', '7', '6', '5', '4', '3', '2', '1']

 

✏️ f-문자열

  • 문자열 안에 값을 format() 보다 간단하게 삽입할 수 있다.
  • 파이썬 3.6 버전 이상부터 사용 가능하며, 문자열 앞에 f를 붙여서 만든다. 문자열 내부에 표현식을 { } 로 감싸서 삽입할 수 있다.
f ' 문자열 {표현식} 문자열 '

 

# format 함수 사용
a = "{}".format(10)
# f문자열 사용
b = f'{10}'	# 10
# {} 안에 표현식 사용
c = f"3 + 4 = {3+4}"
# 출력
3 + 4 = 7

 

2024.01.13 - [개발/혼공학습단_11기] - [혼공파] 혼자 공부하는 파이썬_2주차 (2)

새해를 맞아, 재작년에 잠깐 시도했으나 결국 끝내지 못한 파이썬 공부를 다시 시작했다.

또 작심삼일로 끝날까봐 나를 채찍질해 줄 무언가가 필요했는데, 혼공학습단 11기에 선정되어서 다행이었다.

앞으로 한달 반 정도 시간 동안 열심히 공부해 보려고 한다.


Chapter 01. 파이썬 시작하기

[자주 나오는 파이썬 용어들]

 

✏️ 문장 (statement) : 실행할 수 있는 코드의 최소 단위. 문장들이 모여서 프로그램이 된다.

✏️ 표현식 (expression) : 어떠한 값을 만들어 내는 간단한 코드. 값이란 숫자, 수식, 문자열 등을 의미한다.

✏️ 키워드 (keyword) : 파이썬에서 특정 의미로 사용하겠다고 미리 정의해 놓은 단어들.

# 키워드 확인 방법
import keyword
print(keyword.kwlist)

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else',
 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
 'return', 'try', 'while', 'with', 'yield']

 

✏️ 식별자(identifier): 프로그램 작성 시 이름을 붙일 때 사용하는 단어. 주로 변수명/함수명 등으로 사용한다. 식별자에는 키워드를 사용할 수 없으며 공백을 포함할 수 없다.

 

     ✔️ 스네이크 케이스 : 단어 사이에 언더바 ( _ ) 기호를 붙여 만든 식별자. 주로 함수/변수등에 사용

phone_number = "01012345678"

 

     ✔️ 캐멀 케이스 : 단어들의 첫 글자를 대문자로 만든 식별자. 주로 클래스 작성 시 사용

PhoneNumber  = "01012345678"

     


Chapter 02. 자료형

[자료형이란?]

 

✏️ 자료 : 프로그램이 처리할 수 있는 모든 것

✏️ 프로그램 : 자료를 처리하기 위한 모든 행위

✏️ 자료형 : 기능과 역할에 따라 자료를 구분한 자료의 형식. 기본적으로 문자열, 숫자, bool 등이 있다. type() 함수를 사용하여 자료형을 확인할 수 있다.

 

[문자열]

 

✏️ 문자열(string) : 문자들이 나열된 자료형. 큰따옴표 (" ") 나 작은 따옴표 (' ') 로 감싸서 만든다.

      ✔️ 이스케이프 문자 : 문자열 내부에서 특수한 기능을 수행하는 문자. 역슬래시 ( \ ) 기호와 함께 조합해서 사용한다.

# 따옴표로 감싸 입력하는 것들은 모두 문자열이다.
print("Hello Python Programming..") # Hello Python Programming.. 
print('안녕하세요') # 안녕하세요

# 문자열 내부에 따옴표를 넣으려면
print(" '안녕하세요' 반갑습니다 ") # '안녕하세요' 반갑습니다
print(' "안녕하세요" 반갑습니다 ') # "안녕하세요" 반갑습니다

# 문자열 내부에 역슬래시 (\) 와 함께 사용하면 내부에 따옴표를 넣을 수 있다.
print('\"안녕하세요\" 반갑습니다') # "안녕하세요" 반갑습니다
print("\'안녕하세요\' 반갑습니다") # '안녕하세요' 반갑습니다

# 줄바꿈, 탭 기능
print("안녕하세요\n 반갑습니다")
안녕하세요
반갑습니다

print("안녕하세요\t 반갑습니다")
안녕하세요	반갑습니다

 

[문자열 연산자]

 

숫자에 더하기, 곱하기, 빼기, 나누기 연산자를 적용할 수 있는 것처럼, 문자열에도 적용할 수 있는 연산자가 있다.

 

✔️ 문자열 연결 연산자 ( + ) : 두 문자열을 연결하여 새로운 문자열을 만들 수 있다.

💡 “문자열” + “문자열”

 

✔️ 문자열 반복 연산자 ( * ) : 문자열을 숫자와 * 연산자로 연결하여 숫자만큼 문자열을 반복할 수 있다.

💡 문자열 * 숫자

 

# 연결 연산자 기본 사용법
print("안녕"+"하세요")   # 안녕하세요

# 문자열과 연결하지 않으면 에러가 발생한다!
print("안녕하세요" + 1 )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not int

# 문자열과 숫자를 연결하려면 숫자에 큰따옴표를 붙여서 문자로 인식시켜야 한다.
print("안녕하세요" + "1" )  # 안녕하세요1

# 반복 연산자 사용 방법 1
print("안녕하세요"*2)    # 안녕하세요안녕하세요

# 반복 연산자 사용 방법 2 (순서를 바꿔서도 가능)
print(2*"안녕하세요")    # 안녕하세요안녕하세요

 

✏️ 문자열 연산자의 우선순위 : 반복 연산자 ( * ) 가 연결 연산자 ( + ) 보다 우선이다.

print("안녕"+"하세요"*3)     # 안녕하세요하세요하세요

print(("안녕"+"하세요")*3)   # 안녕하세요안녕하세요안녕하세요

 

✏️ 인덱싱 ( [ ] )

 

     ✔️ 문자열 내부의 문자 하나를 선택하는 연산자이다.

     ✔️ 대괄호 [ ] 안에 선택할 문자의 위치를 지정하며, 이 숫자를 인덱스 (index)라고 한다.

     ✔️ 문자열의 위치는 무조건 0부터 시작한다. ( 제로 인덱스 유형 )

     ✔️ 양수와 음수 모두 가능하며, 음수로 입력할 경우 뒤에서 부터 접근할 수 있다.

# 양수 인덱스
print("안녕하세요"[0])  # 안
print("안녕하세요"[1])  # 녕
print("안녕하세요"[2])  # 하
print("안녕하세요"[3])  # 세
print("안녕하세요"[4])  # 요

# 음수 인덱스
print("안녕하세요"[-1]) # 요
print("안녕하세요"[-2]) # 세
print("안녕하세요"[-3]) # 하
print("안녕하세요"[-4]) # 녕
print("안녕하세요"[-0]) # 안

 

✏️ 슬라이싱 ( [ : ] )

 

     ✔️ 문자열의 특정 범위를 선택할 때 사용하는 연산자이다.

     ✔️ 범위는 대괄호 안에 위치를 콜론 ( : ) 으로 구분해서 지정한다.

     ✔️ 파이썬은 범위 지정 시 “마지막 숫자를 포함하지 않음”

💡 “문자열”[시작 인덱스 : 끝 인덱스 -1]

 

# 문자열 슬라이싱
# 파이썬은 범위 지정 시 마지막 숫자를 포함하지 않기 때문에, 1번째+2번째+3번째글자 까지만 출력
print("안녕하세요"[1:4])  #녕하세

print("안녕하세요"[0:2])  #안녕

# 대괄호 안에 넣는 범위 둘 중 하나를 생략 가능
# 마지막 인덱스를 생략하는 경우, 시작 인덱스 부터 가장 최대 위치 (마지막 글자) 까지 선택
print("안녕하세요"[1:])   # 녕하세요

# 시작 인덱스를 생략하는 경우, 처음부터 (마지막 인덱스 -1) 까지 선택
print("안녕하세요"[:3])   # 안녕하

 

✏️ len() : 문자열에 들어 있는 문자의 개수 (문자열의 길이) 를 세어 주는 함수

print(len("안녕하세요"))  # 5

 

[숫자 자료형]

 

✏️ 정수형 (int) : 소숫점이 없는 숫자 자료형

✏️ 실수형 (float) : 소숫점이 있는 숫자 자료형

 

[수 자료형의 연산]

 

✏️ 사칙연산 ( +, -, *, / ), 나머지 연산자 ( % ), 정수 나누기 연산자 ( // ), 제곱 연산자 ( ** )

     ✔️ 정수 나누기 연산자는 나눗셈 후 몫만 남기는 연산자이다.

 

[수 자료형의 우선순위]

 

✏️ 곱하기( * ), 나누기( / ) 가 우선이고, 더하기( + ) , 빼기( - ) 연산자가 그 다음으로 우선이다.

✏️ 같은 우선 순위를 가지는 연산자는 왼쪽에서 오른쪽으로 계산한다.


[1주차 기본 미션]

p.101 3~5번 실행 결과 쓰고 인증하기

 

나는 ebook으로 구매해서 공부하고 있기 때문에 캡쳐하여 아이패드로 실행 결과를 작성했다. (혹시 문제가 된다면 댓글 부탁 드립니다...)

☑️ 파이썬은 문자열의 위치를 0부터 계산하기 때문에 위 예제의 경우 0~4 까지의 인덱스를 선택할 수 있다. 이 범위를 넘는 인덱스 선택 시 인덱스 에러( IndexError) 가 발생한다.

☑️ 파이썬에서 문자열 범위를 선택할 때는 마지막 숫자를 포함하지 않는다. 따라서 위 예제처럼 [1:3] 선택 시 1번째~2번째 인덱스 값만 출력한다. 또한 마지막 인덱스를 생략하는 경우, 시작 인덱스(0번째) 부터 문자열의 끝까지 선택하며, 시작 인덱스를 생략하는 경우 처음부터 (마지막 인덱스-1) 까지 선택한다.

 

자연수 n이 매개변수로 주어질 때, n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 구하는 문제이다.

func solution(n int) int {
    result := 0
    // x는 2부터 시작
    for x := 2; x < n; x++ {
    	// 매개변수 n을 x로 나눈 나머지가 1인 경우 해당 값 저장 후 for문 탈출
        if n % x == 1 {
            result = x
            break
        }
    }
    return result
}

 

예전에 C++로 풀었던 문제이다.

입력받은 전화번호 뒷 4자리를 제외한 나머지 숫자를 전부 *로 가린 문자열을 리턴하는 문제이다.

아직 파이썬이 익숙하지 않아서 그런가.. 파이썬의 장점을 하나도 못 살리고 있는 것 같다ㅠㅠ

다른 사람들의 풀이를 보니까 깔끔하던데...

 

def solution(phone_number):
    answer = ''
    for i in range(len(str(phone_number))-4):
        answer += '*'
    answer += phone_number[-4:]
    
    return answer

입력받은 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴하는 문제이다.

나머지를 이용해서 풀면 쉽게 풀 수 있다.

파이썬 사칙연산에는 나눗셈 몫을 반환하는 '//' 연산자가 있어서 신기했다!

 

def solution(n):
    answer = []
    for i in range(len(str(n))):
        answer.append(n%10)
        n = n//10
    return answer

 

파이썬 공부를 시작하면서 쉬운 문제부터 풀어보고 있다.

이번엔 프로그래머스의 '직사각형 별찍기' 문제를 풀었다.

 

for i in range(b):
    for j in range(a):
        print('*', end="")
    print('')

 

+ Recent posts