본문 바로가기
ABC부트캠프

[4일차] ABC 부트캠프 : 파이썬프로그래밍2 (24.07.09)

by 나무거나 2024. 7. 10.
728x90

#ABC부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #인공지능 #파이썬 #머신러닝 #딥러닝

벌써 기술배움 2일차이자 부트캠프 4일차의 날이 밝았습니다!

오늘도 비는 왔지만 교육 끝나고 다른 교육을 가야 했기에 아버지 차를 뺏었습니다~~

그래서 자만했죠 여유있을 것이라고..

주차할 곳이 없을줄은 몰랐습니다..

일단 몇바퀴 돌아보다가 없어서 그냥 건물에 돈 낼생각으로 주차하고 달려갔네요..

오늘의 강의 내용

  • 파이썬 데이터 타입과 연산자
    • 시퀀스 데이터 타입
    • 맵핑 데이터 타입
  • 제어문
    • if 조건문
    • match
    • 반복

먼저 어제 하다만 파이썬 데이터 타입과 연산자에서 시퀀스 데이터 타입에 대해 설명해 드리겠습니다.

시퀀스 데이터 타입이란?

- 1, '삼성'처럼 하나의 값이 아니라 여러개의 값을 묶으면 수열, 문자열이 생성

- 파이썬에서는 리스트, 튜플 형식으로 다룸

- 리스트 만들기

salary = [5000, 6000, 7000, 6000, 9000]
salary
>>>[5000, 6000, 7000, 6000, 9000]
  • 리스트는 대괄호로 이루어져 있어요.
  • 나중에 나오겠지만 소괄호와 중괄호는 다른 곳에서 사용되니 헷갈리지 않도록 주의!

- 형식(type) 확인

type(salary) 
>>>list
  • 위에서 만든 리스트 salary의 데이터 타입을 알아보기 위해서는 type()을 이용하여 확인할 수 있습니다.

- 리스트의 메서드(method) append() 활용

salary.append(10000) salary.extend([1,2,3]) 
salary 
>>>[5000, 6000, 7000, 6000, 9000, 10000, 10000, 1, 2, 3]
  • append는 값을 추가하는 함수이고 리스트 또한 값이기에 10000을 적어 넣으면 추가가 가능합니다.
  • extend와 append의 차이점은 extend는 리스트의 각 요소를 개별적으로 추가하는 반면, append는 리스트 전체를 하나의 요소로 추가합니다.

- 인덱싱(indexing)

salary[0]
>>>5000
  • 리스트의 첫 번째 요소를 가져오려면 인덱스를 사용합니다. 인덱스는 0부터 시작합니다.

- 슬라이싱(slicing)

salary[0:2]
>>>[5000, 6000]
  • 리스트의 일부를 가져오려면 슬라이싱을 사용합니다. [시작인덱스:끝인덱스] 형식을 사용합니다. 끝 인덱스는 포함되지 않습니다.

- 값의 수정 (인덱스를 사용하여 리스트의 값을 수정할 수 있습니다.)

salary[2] = 50
salar
>>>[5000, 6000, 50, 6000, 9000, 10000, 10000, 1, 2, 3]

값의 삭제 (del 키워드를 사용하여 리스트의 값을 삭제할 수 있습니다.)

del salary[2]
salary
>>>[5000, 6000, 6000, 9000, 10000, 1, 2, 3]

[연습] 1~45까지 숫자 중에서 마음대로 6개 숫자 선택해서 리스트로 만들어 저장하기

ran_list = [2,14,16,28,42,45]
ran_list
>>>[2, 14, 16, 28, 42, 45]

[연습] 점심/저녁 메뉴 3개를 리스트로 묶어 menu로 저장하기

lunch = ["라멘", "우동", "짜장면"]
dinner = ["닭도리탕", "스테이크", "삼겹살"]
menu = []
menu.append(lunch)
menu.append(dinner)
menu
>>>[['라멘', '우동', '짜장면'], ['닭도리탕', '스테이크', '삼겹살']]

[연습] colors 변수에 저장된 리스트의 두 번째 요소를 "yellow"로 변경하세요.

  • colors라는 리스트를 선언하고 값으로 ["red", "green", "blue"]를 할당하세요.
colors = ["red", "green", "blue"]
colors[1] = "yellow"
colors
>>>['red', 'yellow', 'blue']
 

[연습] animals 리스트에서 "dog"를 삭제하세요.

  • animals라는 리스트를 선언하고 값으로 ["cat", "dog", "rabbit"]을 할당하세요.
animals = ["cat", "dog", "rabbit"]
del colors[1]
colors
>>>['red', 'blue']
 

[연습] letters 리스트의 처음 3개 요소와 마지막 3개 요소를 각각 출력하세요.

  • letters라는 리스트를 선언하고 값으로 ['a', 'b', 'c', 'd', 'e', 'f', 'g']를 할당하세요.
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
letters_list = []

letters_list.append(letters[0:3])
letters_list.append(letters[4:7])
letters_list
>>>[['a', 'b', 'c'], ['e', 'f', 'g']]
 

[연습] 두 리스트를 합쳐서 새로운 리스트 combined_list를 만들고 출력하세요.

  • list1이라는 리스트를 선언하고 값으로 [1, 2, 3]을 할당하세요.
  • list2라는 리스트를 선언하고 값으로 [4, 5, 6]을 할당하세요.
list1 = [1,2,3]
list2 = [4,5,6]
combined_list = []
combined_list.extend(list1)
combined_list.extend(list2)
combined_list
>>>[1, 2, 3, 4, 5, 6]
 

range( )를 활용한 수열 만들기

list = __builtins__.list
list(range(10))
>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • range를 활용하여 연속적인 수열을 만들 수 있습니다. range(start, stop[, step]) 형식을 사용합니다.

리스트의 다양한 연산자와 기능

연산자 in, not in

4 in [1,2,3,4]
>>>True
4 not in [1,2,3,4]
>>>False
  • in 연산자는 값이 리스트에 포함되어 있는지 확인합니다.
  • not in 연산자는 값이 리스트에 포함되어 있지 않은지 확인합니다.

메서드 min(), max(), index(), count()

# 예제 리스트
numbers = [1, 2, 3, 4, 4, 5, 6, 4]

# min() 예제
print(min(numbers))  # 출력: 1

# max() 예제
print(max(numbers))  # 출력: 6

# index() 예제
print(numbers.index(4))  # 출력: 3 (4가 처음 나타나는 위치)

# count() 예제
print(numbers.count(4))  # 출력: 3 (4가 리스트에 3번 나타남)

>>>
1
6
3
3

다차원 리스트 이해하기

lists = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
lists[1][2]
>>>
6

튜플

튜플 만들기

 
salary = (5000, 6000, 7000, 6000, 9000)
salary1 = 5000, 6000, 7000, 6000, 9000
salary[0]
salary[0:2]
>>>
(5000, 6000)

리스트와 유사하지만 수정이 불가하다!!

[연습] range( )와 list( )로 2002년부터 2023년까지 월드컵 개최연도 만들기

list(range(2002,2023,4))
>>>
[2002, 2006, 2010, 2014, 2018, 2022]

[연습] 첫 번째 행의 모든 요소와 세 번째 열의 모든 요소를 각각 출력하세요.

  • matrix라는 2차원 리스트를 선언하고 값으로 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]을 할당하세요.
 
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix[0]
matrix[0][2],matrix[1][2],matrix[2][2]
>>>
(3, 6, 9)

맵핑 데이터 타입 (Mapping Types)

딕셔너리

딕셔너리는 키(key)값(value) 을 연결한 을 활용해서 여러 값을 구분해서 저장

딕셔너리는 중괄호 { }를 활용하고 아래와 같은 방법으로 생성합니다.

{'key1':'value1', 'key2':'value2', 'key3':'value3', ...}

리스트가 연봉처럼 여러 관측치의 동일한 속성을 저장한다면, 딕셔너리는 하나의 대상에 대해서 키라고 부르는 여러 속성의 값을 저장합니다.

딕셔너리 생성 예

this_lecture = {'과정':'Python 기초', '도구':'Jupyter Notebook', '기간':'4일'}
this_lecture
>>>{'과정': 'Python 기초', '도구': 'Jupyter Notebook', '기간': '4일'}

대괄호와 키를 이용한 선택 (리스트의 인덱스 대신 키를 활용)

this_lecture['과정'] #여기서는 없는 키 값을 넣으면 오류가 남
>>>'Python 기초'

메서드 get()을 활용한 선택

this_lecture.get('과정') #여기서는 없는 키 값을 넣어도 오류가 나지는 않음
>>>'Python 기초'

쌍 추가

this_lecture['수강인원'] = 20
this_lecture
>>>{'과정': 'Python 기초', '도구': 'Jupyter Notebook', '기간': '4일', '수강인원': 20}

쌍제거

 
del this_lecture['기간']
this_lecture
>>>{'과정': 'Python 기초', '도구': 'Jupyter Notebook', '수강인원': 20}

키 목록 선택

this_lecture.keys()
type(this_lecture.values())
>>>dict_values

리스트 형식으로 변환

list(this_lecture.keys())
>>>['과정', '도구', '수강인원']

값 목록 선택

list(this_lecture.values())
>>>['Python 기초', 'Jupyter Notebook', 20]

연습 문제

  1. 각자 본인의 아래 정보를 딕셔너리로 저장
  2.  
my_information = {'이름':'ABC', '나이':'24', '전공':'미래모빌리티학과','취미':'만들기'}
my_information
>>>{'이름': 'ABC', '나이': '24', '전공': '미래모빌리티학과', '취미': '만들기'}
 

점심식사

대충 중요

오늘은 구내식당에서 점심을 먹었답니다~

6000원의 알찬 구성

6000원에 이렇게 먹을 수 있다는게 가장 큰 메리트 인 것 같아요!

주차장 요금도 리셋할겸 차를 빼서 커피 한잔 하고 왔어요

주변 몇바퀴 돌면 주차할곳 한곳은 있을거라 생각했는데..

결국 기초과학연구원에 주차하고 걸어왔습니다..

이제 오후 수업도 화이팅!


Python 제어문

주요 내용

  1. Python 제어문의 이해 및 활용
  2. 예제 문제

목표

  1. 조건문을 이해하고 활용할 수 있다.
  2. 반복문을 이해하고 활용할 수 있다.

1. 제어문

1-1. if 조건문

  • if 문을 활용하여 특정한 상황에서만 명령어를 실행할 수 있습니다.
  • else나 elif를 추가로 활용하여 여러 조건을 처리할 수 있습니다.

if의 활용

score=90

if score >=80:
    print('합격')
>>>합격

if와 else의 활용

score=10

if score >=80:
    print('합격')
else:
    print('탈락')
>>>탈락

if와 elif와 else의 활용

score = 90 # 결측

if score > 0:
    print('미응시')

if score >=80:
    if score == 100:
        print('EX')
    else:
        print('합격')
else:
    print('탈락')
>>>
미응시
합격

[연습] 사용자로부터 입력받은 변수 score의 성적을 출력하세요

  • 90 이상: "A"
  • 80 이상: "B"
  • 70 이상: "C"
  • 60 이상: "D"
  • 60 미만: "F"
score = int(input("점수를 입력하세요: "))

if score < 60:
    print('F')
elif score <= 60 and score < 70:
    print('D')
elif score <= 70 and score < 80:
    print('C')
elif score <= 80 and score < 90:
    print('B')
else:
    print('A')
>>>
점수를 입력하세요: 92
A

 

 

[연습] 사용자로부터 입력받은 변수 num이 짝수인지 홀수인지 판별하여 결과를 출력하세요.

입력한 수는 14이며, 짝수로 판별되었습니다.

score = int(input("점수를 입력하세요: "))

if score < 60:
    print('F')
elif score <= 60 and score < 70:
    print('D')
elif score <= 70 and score < 80:
    print('C')
elif score <= 80 and score < 90:
    print('B')
else:
    print('A')
>>>
점수를 입력하세요: 92
A

[연습] 사용자로부터 입력받은 변수 num이 양수, 음수, 0인지 판별하여 결과를 출력하세요.

입력한 수는 14이며, 양수로 판별되었습니다.

num = int(input('input number:'))
print(1 + 1)
if num > 0:
    msg = "입력한 수는 {}이며, {}로 판별되었습니다.".format(num, '양수')
    print(msg)
elif num < 0:
    print("입력한 수는 %d이며, %s로 판별되었습니다." % (num, '음수'))
else:
    print("입력한 수는 0이며, 0로 판별되었습니다.")
>>>
input number: 0
입력한 수는 0이며, 0로 판별되었습니다.

[연습] 사용자로부터 입력받은 년도 year이 윤년인지 확인하세요.

윤년 조건: 연도가 4로 나누어떨어지지만, 100으로 나누어떨어지지 않거나 400으로 나누어떨어지는 경우.

input_year = int(input('년도를 입력해주세요'))

if (input_year % 4) == 0 and (input_year % 100 != 0 or input_year % 400 == 0):
    print('윤년입니다.')
else:
    print('x')
>>>
년도를 입력해주세요2002
x

1-2. match

match는 반복적인 == 연산을 보다 쉽게 수행할 수 있게 해줍니다

num = 1
match num:
    case 1:
        print('1번 선택')
    case 2:
        print('2번 선택')
    case 3:
        print('3번 선택')
    case _:
        print('잘못된 입력입니다.')
>>> 1번 선택

[연습] 사용자로부터 입력받은 연산을 수행하는 match문을 하고 결과를 출력하시오.

  • 입력예시: 3 + 2
  • 모든 입력은 공백을 단위로 구분
  • 오직 한자리 양수, 사칙연산(+,-,*,/)만 입력가능
input_str = input('연산을 입력해주세요')
# input_str = '3 + 2'
input_list = input_str.split()

operator_str = input_list[1]
operand_left = int(input_list[0])
operand_right = int(input_list[2])

match operator_str:
    case '+':
        result = operand_left + operand_right
    case '-':
        result = operand_left - operand_right
    case '*':
        result = operand_left * operand_right
    case '/':
        result = operand_left / operand_right

print(result)
>>>
연산을 입력해주세요1 + 6
7
 

1-3. 반복문

for와 while 문은 반복 대상을 지정하고 특정한 명령을 반복 실행합니다.

원하는 행위를 반복할 수 있습니다.

print(1)
print(2)
print(3)

for i in range(1,4):
    print(i)
    
for i in [1,2,3]:
    print(i)

모두 결과는 1 2 3

간단한 for 예제

total = 0
for i in [11,12,13]:
    total += i

print(f'합계는 {total}입니다.')
>>> 합계는 36입니다.

for문 안에서 if 문을 활용

m2 = []

input_list = list(range(1,101))
# print(input_list)
for a in [1, 2, 3, 4, ..., 100]:
    if a % 7 == 0: # 7로 나눈 나머지가 0이면
        m2.append(a)

m2
>>>[7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]
result = 0

for i in list(range(1, 101)):
    if i % 7 == 0:
        result += i

print(result)
>>> 735

for문과 컬렉션

딕셔너리와 같은 컬렉션 타입을 반복문에서 사용할 수 있습니다.

my_info = {'이름': '홍길동', '나이': 30, '지역': '서울'}

# 이름: 홍길동
# 나이: 30
# 지역: 서울

for key in list(my_info.keys()):
    print(my_info[key])


user = {'이름': '홍길동', '나이': 30, '지역': '서울'}
for key, value in [('이름', '홍길동'), ('나이', 30), ('지역', '서울')]:
    print(f"{key}: {value}")
>>>
홍길동
30
서울
이름: 홍길동
나이: 30
지역: 서울

강제 반복제어 (break, continue)

for x in [1, 2, 3, 4, 5]:
    if x % 2 == 0:
        break
    print(x)
>>> 1

[참고] []와 for, if의 활용

리스트를 만드는 [] 안에서 for와 if를 활용할 수도 있음

리스트 축약

m2 = [x for x in [1, 2, 3, 4, 5] if x % 2 == 0]

m2 = []
for x in [1,2,3,4,5]:
    if x % 2 == 0:
        m2.append(x * 2)
>>>[2, 4]

while 반복문

num = 1
while num < 5:
    print(num)
    num += 1
>>>
1
2
3
4

[연습] for문을 사용하여 리스트의 모든 요소를 출력하세요.

  • fruits라는 리스트를 선언하고 값으로 ["apple", "banana", "cherry"]를 할당하세요.
fruits = ["apple", "banana", "cherry"]

for i in range(3):
    print(fruits[i])
>>>
apple
banana
cherry
 

[연습] while 문을 사용하여 리스트의 모든 요소를 출력하세요.

  • fruits라는 리스트를 선언하고 값으로 ["apple", "banana", "cherry"]를 할당하세요.
fruits = ["apple", "banana", "cherry"]
i = 0
while i<3:
    print(fruits[i])
    i += 1
>>>
apple
banana
cherry
 

[연습] for문을 사용하여 아래 조건에 부합하는 출력을 수행하시오.

  • 1부터 10까지의 양수 출력
  • 1부터 100사이의 3의 배수 출력
 
list1_to_10 = []
list1_to_100_in_3 = []

for i in range(1,11):
    list1_to_10.append(i)
print(list1_to_10)

for a in range(3,101,3):
    list1_to_100_in_3.append(a)
print(list1_to_100_in_3)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

[연습] 35이상 87이하의 양의정수의 합계를 구하여 출력하시오.

total = 0
for i in range(35,88):
    total += i
print(total)
>>>3233

[연습] 주어진 리스트에서 값이 10인 요소를 찾고, 해당 값의 인덱스를 출력하시오. 값이 없다면 "찾을 수 없음"을 출력하시오.

lst = [3, 5, 7, 10, 14, 20]
found = False
for idx, val in enumerate(lst):
    if val == 10:
        print(f'인덱스: {idx}')
        found = True
        break
if not found:
    print('찾을 수 없음')

# 결과:
# 인덱스: 3

[연습] 주어진 리스트에서 값이 30이상인 값은 '우수'란 텍스트 값으로 변경하시오

  • scores는 10, 35, 20, 28, 13, 18, 27, 45 의 리스트로 선언하시오.
scores = [10, 35, 20, 28, 13, 18, 27, 45]

for i in range(len(scores)):
    if scores[i] >= 30:
        scores[i] = '우수'
print(scores)
>>> [10, '우수', 20, 28, 13, 18, 27, '우수']
 

[연습]

  1. 구구단 19단 출력하기
  2. 19 X 1 = 19
  3. 19 X 2 = 38 ...
  4. 구구단 2단부터 9단까지 출력하기
  5. 아래의 숫자 리스트 x 에서 10 이상인 숫자만 따로 모아 합계 계산하기
  6. x = [6, 1, 15, 2, 90, 35, 9]
for i in range(1,10):
    print("19 X {} = {}".format(i,19*i))

for i in range(1,10):
    print("{}단".format(i))
    for x in range(1,10):
        print("{} X {} = {}".format(i,x,i*x))
        
x = [6, 1, 15, 2, 90, 35, 9]
resualt = 0
for i in range(1,7):
    if x[i] >= 10:
        resualt += x[i]
print(resualt)
>>>
19 X 1 = 19
19 X 2 = 38
19 X 3 = 57
19 X 4 = 76
19 X 5 = 95
19 X 6 = 114
19 X 7 = 133
19 X 8 = 152
19 X 9 = 171
1단
1 X 1 = 1
1 X 2 = 2
1 X 3 = 3
1 X 4 = 4
1 X 5 = 5
1 X 6 = 6
1 X 7 = 7
1 X 8 = 8
1 X 9 = 9
2단
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
3단
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
4단
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
5단
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
6단
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
7단
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
8단
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
9단
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
140
 

[연습] for문을 사용하여 리스트에서 가장 큰 값을 찾고 출력하세요.

numbers라는 리스트를 선언하고 값으로 [10, 20, 4, 45, 99, 18]을 할당하세요.

 
# numbers 리스트 선언
numbers = [10, 20, 4, 45, 99, 18]

# 가장 큰 값을 저장할 변수를 초기화
max_value = numbers[0]

# for문을 사용하여 리스트의 모든 요소를 확인
for num in numbers:
    # 현재 요소가 max_value보다 크면 max_value를 갱신
    if num > max_value:
        max_value = num

# 가장 큰 값 출력
print("리스트에서 가장 큰 값은:", max_value)
>>> `리스트에서 가장 큰 값은: 99

[연습] 아래의 별을 출력하는 반복문을 구성하시오.

*
**
***
****
*****

*****
****
***
**
*

    *
   **
  ***
 ****
*****
i = 1
x = 0
z = 0
for i in range(5):
    i += 1
    print(i*"*")
print("\n")
for i in range(5):
    i = 5 - i
    print(i*"*")
print("\n")
for x in range(5):
    x = 5 - x
    z += 1
    print(x*" ","*"*z)
>>>
*
**
***
****
*****

*****
****
***
**
*

    *
   **
  ***
 ****
*****

자료형

데이터를 저장할 때 사용하는 자료형은 다양합니다. 주요 자료형과 그 특징을 살펴보겠습니다.

숫자형

x = 10      # 정수
y = 10.5    # 실수
print(type(x), type(y))

# 결과:
# <class 'int'> <class 'float'>

문자열

s = "Hello, World!"
print(s)

# 결과:
# Hello, World!

리스트

lst = [1, 2, 3, 4, 5]
print(lst)

# 결과:
# [1, 2, 3, 4, 5]

튜플

t = (1, 2, 3, 4, 5)
print(t)

# 결과:
# (1, 2, 3, 4, 5)

딕셔너리

 
d = {'name': 'Alice', 'age': 25}
print(d)

# 결과:
# {'name': 'Alice', 'age': 25}

집합

s = {1, 2, 3, 4, 5}
print(s)

# 결과:
# {1, 2, 3, 4, 5}

오늘은 여기까지 입니다~~ 내일도 파이썬으로 찾아 오겠습니다.

728x90