본문 바로가기
프로그래밍/Python

[AI 부트캠프] DAY 10 - 파이썬 4

by HOHHOH 2023. 7. 29.

[오늘의 일지]

# 오늘은 온라인 실시간 강의로 파이썬의 기본부터 다시 수업이 진행되었습니다. 그래서 오늘의 일지는 수업 중에 다시 봐도 헷갈릴 만한 것이나 실습 연습 문제에서 다뤘던 부분들 위주로 일지를 작성해 보겠습니다.

 

파이썬 온라인 실시간 강의 - 변수부터 반복문까지의 내용

[상세 내용]

주피터 노트북 (Jupyter notebook)

특징

- 주피터 노트북은 우선 데이터 분석가들이 가장 많이 사용하는 파이썬 편집 프로그램이라고 합니다. 저는 지난 온라인 녹화 강의에서는 구글 코랩을 사용했었습니다. 지금까지 제 주관적인 입장에서는 사실 코랩이 여러 가지 측면에서 좀 더 편하다고 느꼈습니다. 근데 이번에 강사님에 맞춰 주피터 노트북 위주로 사용해 봤는데 단축키 측면이나 문법을 사용하는 데 있어서 더 쓰기 좋았다고 느꼈습니다. 결론적으로는 사실 큰 차이는 없기 때문에 취향에 맞게 사용하는 것이 좋을 거 같습니다.  주피터 노트북 설치에 관해서 관련 링크 남기겠습니다.

 

 

Project Jupyter

The Jupyter Notebook is a web-based interactive computing platform. The notebook combines live code, equations, narrative text, visualizations, interactive dashboards and other media.

jupyter.org

 

- 주피터 노트북의 장점

# 셀 단위 실행
# 결과값도 셀 단위 실행결과를 바로 확인 가능 (인터프리터 형태)
# 기존 언어는 컴퓨터가 알아듣기 쉬운 언어 (어셈블리 형태)
# 위에서 아래로
# esc 키로 셀을 제어하는 커맨드 모드와 셀 내부 편집을 위한 에디트 모드 변경
# 코드 편집과 마크다운 문법을 사용하여 리포트 형식으로도 활용가능

 

- 주피터 노트북의 커맨드 모드 명령

# 셀 단위 실행
# 결과값도 셀 단위 실행결과를 바로 확인 가능 (인터프리터 형태)
# 기존 언어는 컴퓨터가 알아듣기 쉬운 언어 (어셈블리 형태)
# 위에서 아래로
# esc 키로 셀을 제어하는 커맨드 모드와 셀 내부 편집을 위한 에디트 모드 변경
# 코드 편집과 마크다운 문법을 사용하여 리포트 형식으로도 활용가능

 

- 주피터 노트북의 에디트 모드 명령어

# 에디트 모드 진입 - enter 혹은 마우스 클릭
# 셀 실행 - shift + enter, ctl + enter
# # 주석 : 다른코드와 구별하기 위해서, 코드의 설명, 코드의 실행과는 전혀 관계없음
# ''' 
#   ''' : docstring 여러줄의 주석

 

파이썬 기본 내용 및 실습

복습할 만한 내용

- 출력된 내용을 가져올 때 '''  ''' 이 방식이 유용하게 쓰인다.

# 연습문메에서 꽤 긴 내용이 출력으로 나와 있었고 이걸 그냥 복사해서 ''' '''를 이용하면 쉽게 만들수 있었다
text ='''
          영수증          
------------------------
아이스아메리카노     4,500원
카페라떼           4,500원
치즈케잌           6,000원
-----------------------
total           15,000원

이용해 주셔서 감사합니다.
------------------------
'''
print(text)
>>>
          영수증          
------------------------
아이스아메리카노     4,500원
카페라떼           4,500원
치즈케잌           6,000원
-----------------------
total           15,000원

이용해 주셔서 감사합니다.
------------------------

 

-변숫값을 포함한 문자열을 출력할 때 여러 가지 방법

name=data1
hight=data2
weight=data3
job=data4

# 기존 방법
# print명령어에 전달하는 문자열을 + 기호로 묶어 전달, 오직 문자열만 + 로 연결가능
# 그렇다면 변수가 포함 된 문장은 어떻게 출력을 해야할까?
# 위에서 학습한 형변환을 활용합니다.
print(name+'의 키는 ' +str(hight)+'cm이고 몸무게는 '+str(weight) + 'kg입니다. 직업은 '+job + '입니다.')

# format string
# 문자열에 format을 지정하여 {}안에 들어갈 변수를 지정해주는 방법
# 파이썬 3.6버전 이전 출력방식
print('{}의 키는 {}cm이고 몸무게는 {}kg입니다. 직업은 {}입니다.'.format(name, str(hight), str(weight), job))

# New format string
# 파이썬 3.6버전 이후 권장하는 출력방식
# 기존 format string 보다 사람이 보기에 직관적이고 명확한 문자와 변수간 관계 확인이 가능하다.
print(f'{name}의 키는 {hight}cm이고 몸무게는 {weight}kg입니다. 직업은 {job}입니다.')

 

- 출력 결괏값의 소수점 자릿수 제한

a = 3.1415926536
# round(반올림)
print(round(a, 4)) # round(값,소수 몇번째 자리)
# format '{:0자릿수.자릿수f}'.format(변수명)
# 숫자의 전체 자릿수는 10자리(소수점 포인트 포함), 뒤 소수점 뒤 5자리 표기

# new format string
# f'{변수명:0자릿수.자릿수f}'
print(f'{a:010.6f}')
>>>
3.1416
003.141593

 

- 조건 연산에서 연산자 정리

## 조건연산
# `and`, `&`  : 동시충족  
# `or`, `|` : 조건충족  
# `in` : 보유여부  (멤버연산자라 부릅니다)  
# `is` : 같음여부
# `not` : 다름여부  
# `==` : 같은값인지 확인  
# `!=`: 다른값인지 확인  
# `<`, `>`, `<=`, `>=` : 대소비교  

# >`bool` 타입으로 결과값을 내준다.  
# 참인지 거짓인지 `True`, `False`로 구분가능한 데이터

# 조건 곱, 조건 합
# True = 1, False = 0/ and 곱연산, or 합연산
bool('안녕')
>>> True
True and False
>>> False
True or False
>>> True
1 and 0
>>> 0
1 or 0
>>> 1

 

- 리스트에서 중요 내용

- 리스트의 인덱싱에서 알아둘 특징

# []는 원하는 위치 찾기
# [0:위치]는 몇 번째 위치까지 찾기
# [0:위치:간견] 특정 위치까지 특정 간격으로 찾기

 

- append, remove, pop의 특징

# append()는 값을 추가할 때 뒤에서 부터 추가한다
# remove()는 특정값을 제거할 때 두개가 있다면 앞쪽부터 제거
test_list = [10, 20, 30, 40, 60, 70, 80, 90, 100, 50]
test_list.remove(50)
test_list
>>>
[10, 20, 30, 40, 60, 70, 80, 90, 100, 50]

# pop()은 그 값을 제거하는 것이 아닌 가지고 간 것이다
test_list = [10, 20, 30, 40, 60, 70, 80, 90, 100, 50]
a = test_list.pop()
print(test_list, a)
>>>
[10, 20, 30, 40, 60, 70, 80, 90, 100] 50

 

- 리스트의 정렬에서 sort, reverse, 그 밖의 특징

# 테스트에 사용할 num_list 생성
num_list = [3, 4, 6, 1, 2, 8, 7]

# 리스트의 값 정렬 (숫자는 오름차순, 문자는 알파벳순, 한글은 가나다순)
# 역정렬도 가능
num_list.sort() # 순서상 정렬 후 reverse를 써야 역순 가능
num_list.reverse() # 역순에서 두 줄을 한줄로 가능 num_list.sort(reverse=True)
num_list
>>>
[8, 7, 6, 4, 3, 2, 1]

# 그냥 reverse의 기능은 뒤집기다
num_list = [3, 4, 6, 1, 2, 8, 7]
num_list.reverse()
num_list
>>>
[7, 8, 2, 1, 6, 4, 3]

# 인데싱[::]를 이용하면 reverse랑 같은 뒤집기 기능이 가능하다
num_list = [3, 4, 6, 1, 2, 8, 7]
num_list[::-1]
>>>
[7, 8, 2, 1, 6, 4, 3]

 

- 리스트 삭제

# 리스트 삭제 (변수 삭제, 값 삭제)
# 생성한 리스트는 남아있지만 내부 항목을 모두 삭제합니다.
test_list.clear()
test_list
>>>
[]

# 메모리에서 완전히 삭제
del test_list
test_list
>>>
완전 제거

 

- 딕셔너리에서 값에 접근할 때 key값으로 접근

# key값으로 딕셔너리 값에 접근
wallet['key1']
# 리스트에서 인덱스를 사용하였다면 딕셔너리는 key값을 전달하여 값에 접근합니다.

 

- 문자열 내장함수

# upper() : 대문자 변환  
# lower() : 소문자 변환  
# capitalize() : 문장 첫단어 대문자 변환  
# join() : 문자열 이어 붙이기  
# split() : 문자열 나누기  
# strip(): 공백 제거  
# replace() : 치환  
# startswith() : ~로 시작하는 단어찾기  
# endswith() : ~로 끝나는 단어찾기

 

- 흐름제어문(controlflow)

# 흐름제어문(controlflow)
# 데이터 혹은 사용자가 설정한 조건에 따라 코드의 작동 및 프로그램이 제어 되도록 하는 구문
# 판별문, 조건문 또는 분기라고 부름 if, elif, else
# 반복문, 무한반복문 for, while
# 예외처리 break, try, except, continue

# 흐름제어문의 구성
# 흐름제어문을 구분하기 위해 indentation block(들여쓰기) 4칸, 혹은 tab을 사용한다.
# 타 언어의 { { } } 구분 대신 사용하기에 때문에 들여쓰기가 굉장히 중요하다
# 순차 : 위에서부터 아래 방향으로 코드가 순서대로 실행된다.
# 분기 : 판별문
# 반복 : while, for 혹은 함수, 클래스

 

- 제어문의 흐름을 파악하기 좋은 예

# 코드의 실행 결과는 무엇이 출력될까요?

print(1) # 출력
if True:
    print(2) # 출력
    if False:
        print(3) #미출력
        print(4)
    elif True: 
        print(5) #출력
        if True:
            print(6) # 출력
            print(7) # 출력
            if False:
                print(8)
            elif True: 
                print(9) #출력
    else:
        print(10) # 미출력
    if True: 
        print(11) # 출력
    print(12) #출력
print(13) # 출력

 

- 스무고개 연습 문제

# 연습문제
# 간단한 스무고개 게임을 만들어봅시다.
# 컴퓨터와 플레이어를 변수로 만들고 두 값을 비교하여 업/다운/정답을 출력하는 프로그램을 만들어보겠습니다.
# 컴퓨터 변수는 특정값을 저장하고, 플레이어 변수는 사용자에게 값을 입력받아서 저장
# if 각 조건에 따라 출력결과를 달리해주는 코드를 생성

com = 40 (여기는 문제를 내는 부분으로 바뀌는 값)

player = int(input('숫자를 입력해 주세요 :'))
if  player > com:
    print('다운')
elif player < com :
    print('업')
else :
    print('정답')

 

- bmi 지수와 비만도 측정 연습문제

# bmi 기준
# bmi = 체중(kg) / 키(m)^2
# 20 미만 - 저체중
# 20 ~ 24미만 - 표준체중
# 24 ~ 30미만 - 과체중
# 30 이상 - 비만

# 연습문제
w = float(input('체중(kg): '))
h = float(input('키(cm)'))
bmi = w/(h/100)**2
if  30 <= bmi :
    print(f'bmi 지수는 {bmi}이며 비만입니다.')
elif 24 <= bmi < 30 :
    print(f'bmi 지수는 {bmi}이며 과체중입니다.')
elif 20 <= bmi < 24 :
    print(f'bmi 지수는 {bmi}이며 표준체중입니다.')
else :
    print(f'bmi 지수는 {bmi}이며 저체중입니다.')

 

- for 문의 구조

# for 문의 구조
# for 반복자 in 반복범위: # 반복범위로 전달한 자료구조 혹은 범위 안에서 순환하며 반복자가 정의되며
# 반복실행코드 # 위의 for문 반복범위 횟수만큼 반복실행코드가 반복되어 실행된다.
# 반복자 : 구간(범위)를 순환하며 정의되는 변수
# 반복범위 : list 등 순서가 존재하는 자료구조
# 관례적으로 심플한 반복자는 _(반복자를 작업에 사용하지 않을경우) 혹은 영문자 i(iterator)를 사용한다.
# 혹은 range() 명령어로 혹은 반복작업 횟수로 설정 가능
# range() 명령어
# range(횟수) 횟수만큼의 범위 생성
# range(x, y, z) x 부터 y-1 까지 z스텝 범위를 만들어주는 함수

 

- 전체 구구단 만들기

# 전체 구구단 2단부터 9단까지
for i in range(2,10):
    for j in range(1,10):
        print(f'{i} x {j} = {i*j}')
>>>
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 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 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 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 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 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 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 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

 

- 내부단수와 외부단수에서 범위가 정해지는 구구단

# 내부단수 7단까지만
for i in range(2,10):
    for j in range(1,10):
        if j > 7 :
            break
        print(f'{i} x {j} = {i*j}')
print('='*10)
# 외부단수 5단 까지
for i in range(2,10):
    if i > 5:
        break
    for j in range(1,10):
        if j > 7:
            break
        print(f'{i} x {j} = {i*j}')
>>>
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
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
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
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
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
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
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
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
==========
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
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
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
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

 

- for문에서 enumerate 사용하는 법

# enumerate는 for문에서 인덱싱을 표현해 준다.
# 횟수뿐 아니라 구간이 정해져 있는 데이터를 순환하면서도 작업가능
test_list = ['데이터1', '데이터2', '데이터3', '데이터4', '데이터5', '데이터6']
# enumerate() 함수안의 자료구조의 인덱스와 함께 루프
for index, item in enumerate(test_list):
    if item == '데이터2':
        test_list[index] = '특정 데이터'
    print(index, item)
print(test_list)
>>>
0 데이터1
1 데이터2
2 데이터3
3 데이터4
4 데이터5
5 데이터6
['데이터1', '특정 데이터', '데이터3', '데이터4', '데이터5', '데이터6']

 

-  for문에서 zip() 이용해서 리스트 두 개 묶고 enumerate로 인덱싱 하기

# 횟수뿐 아니라 구간이 정해져 있는 데이터를 순환하면서도 작업가능
test_list1 = ['데이터1', '데이터2', '데이터3', '데이터4', '데이터5', '데이터6']
test_list2 = ['데이터7', '데이터8', '데이터9', '데이터10', '데이터11', '데이터12']
for index,(item1, item2) in enumerate(zip(test_list1,test_list2)):
    print(index,item1,item2)
>>>
0 데이터1 데이터7
1 데이터2 데이터8
2 데이터3 데이터9
3 데이터4 데이터10
4 데이터5 데이터11
5 데이터6 데이터12

 

- for문에서 리스트 만들기 및 리스트 합 구하기

# 그렇다면 미리 정해진 숫자 혹은 데이터로만 사용이 가능할까?
# 생성할 때도 용이함
# 리스트에 0부터 20까지 집어넣는 작업
test_list = []
for i in range(21):
    test_list.append(i)
test_list

# 숫자를 5번 입력받고 합을 계산해주는 코드를 작성해 봅시다.
total = 0
for i in range(5):
    num = int(input('숫자를 입려하세요 : '))
    total += num # total = total + num
print(f'총 합은 {total}입니다.')

# 다른 방식
total = []
for i in range(5):
    num = int(input('숫자를 입려하세요 : '))
    total.append(num)
print(f'총 합은 {sum(total)}입니다.')

 

- list comprehension(for 문에서 [] 안에 직접 리스트 만들기)

# 심플한 리스트 컴프리헨션 구문
[i for i in range(21)]
>>>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20

# if문이 추가된 리스트 컴프리헨션 구문
[i for i in range(21) if i % 2 == 0]
>>>
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# if, else문이 추가된 리스트 컴프리헨션 구문(elif 불가)
[i if i % 2 == 0 else 0 for i in range(21)]
>>>
[0, 0, 2, 0, 4, 0, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20]

test_list =[i for i in range(10)]
[i / 5 for i in test_list]
>>>
[0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8]

 

- while문의 구조

# while문의 구조
# while 조건식: # 조건식이 참이라면
#     실행코드 # 실행코드가 무한반복 실행 됨
# while 문의 조건식이 참일 경우 무조건 실행되게끔 짜여진 구조.
# while 문을 사용 할 때에는 반복구문을 어떻게 종료 해야할지 설정해야 함.

# while문 예시
# 1~100까지의 정수 중에서 홀수들의 합
a = 1
total = 0
while a < 101:
    if a % 2 == 1:
        total += a
    a += 1
print(total)
>>>
2500

 

오늘의 마지막 연습문제

 

- 간단한 스무고개 게임 업그레이드 버전 -

  •  컴퓨터가 저장할 숫자를 사용자에게 입력받아 저장하고, 게이머에게 입력받은 숫자를 판별하여 업, 다운, 정답을 출력.
  •  게임 횟수는 10회이며, 10회 동안 정답을 못 맞힐 경우 실패 문구를 출력하도록 프로그램을 만들어 보겠습니다.
  •  10회 내 정답을 맞히면 코드가 종료되는 코드 추가
# 연습문제
com = 40 # 사용자가 지정한 번호
for i in range(10):
    num = int(input('숫자를 입려하세요 : '))
    if num > com:
        print('다운')
    elif num < com :
        print('업')
    else :
        print('정답입니다.')
        break
    if i == 9:
        print('실패입니다.')

 

[마무리]

 오늘은 파이썬에 관한 내용을 실시간 강의로 처음부터 듣게 되었습니다. 일단은 실시간 강의여서 그런지 기존에 녹화로 봤던 내용들임에도 불구하고 지루하지 않고 시간이 잘 갔던 거 같습니다. 특히 중간중간에 실습 연습문제를 직접 풀어보는 것 덕분이었던 거 같습니다. 그리고 여러 명의 강사님들의 수업을 들으면서 코딩을 하는 습관이나 환경이 개개인들마다 차이가 있었는데 여러 가지 방법으로 학습할 수 있어서 도움이 많이 된 거 같습니다. 오늘이 2주 차의 마지막이었는데 앞으로도 꾸준히 나아가겠다는 다짐을 하며 2주 차를 마무리하겠습니다.

반응형

댓글