A ship in harbor is safe, but that is not what ships are built for.

개발일지/AI 캠프

내일배움캠프 AI - 7일차 TIL, 2022.09.06

플리피나리 2022. 9. 6. 17:35
반응형

스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차

2022.09.06. 7일차 - TIL

 

 

1. 파이썬 특강

  • 사칙연산 : 더하기(+), 빼기(-), 곱하기(*), 제곱(**), 나누기(/, 연산결과 항상 float), 몫(//), 나머지(%)
  • 연산축약
num += 3  # num = num + 3
num -= 3  # num = num - 3
num *= 3  # num = num * 3
num **= 3 # num = num ** 3
num /= 3  # num = num / 3
num //= 3 # num = num // 3
num %= 3  # num = num % 3
  • 문자열에서 + 는 문자열 합치기, * 는 문자열 반복
  • fstring
n1 = 5
n2 = 10

# 같은 결과
print("n1 : %s, n2 : %s, sum : %s" % (n1, n2, n1+n2)) # old Style
print("n1 : {}, n2 : {}, sum : {}".format(n1, n2, n1+n2)) # ~ python < 3.6
print(f"n1 : {n1}, n2 : {n2}, sum : {n1+n2}") # ~ python >= 3.6

# float의 소수점을 원하는 자리까지 출력
PIE = 3.14159265358979
print(f"pie : {PIE:.2f}") # pie : 3.14
  • 딕셔너리 get
.get을 사용해 해당 key가 없을 때 사용될 값을 지정할 수 있다.
print(products.get("egg", 0))  # egg key가 존재하기 때문에 해당 value 출력
print(products.get("drink", 0))  # drink key가 존재하지 않기 때문에 0 출력
  • 딕셔너리 삭제 del
del(products["milk"])  # milk key를 가진 key: value 쌍 삭제
  • 다른 파일에 있는 코드 import
    (파일구조)
    │  a.py
    │  main.py
    ├─ folder
    │  ├─ b.py
    │  ├─ c.py
# a.py
def a_funtion():
    print("execute a")

# main.py / case 1
import a  # a 파일을 import -> 같은 level에 있는 파일 import
a.a_funtion()  # a 파일의 a_funtion() 사용

# main.py / case 2
from a import a_function  # a 파일에 있는 a_function import
a_function()  # a_function만 import 했기 때무네 그냥 a_function()

# main.py / case 3
from a import *  # a 파일에 있는 모든 함수를 import
a_function()
# folder/b.py
def b_funtion():
    print("execute b")

# folder/c.py
def c_funtion1():
    print("execute c1")

def c_funtion2():
    print("execute c2")

# main.py
from folder import b  # folder 폴더에서 b 파일 import
from folder.c import *  # c 파일에 있는 모든 함수import

b.b_funtion() # execute b  --> from 폴더 import 파일 인 경우
c_funtion1() # execute c1  --> from 파일 import 함수 일 경우
c_funtion2() # execute c2
  • 변수 import
# main.py / case 3
from folder import b # *권장O* b 파일 import
print(b.PIE) # 3.14
print(b.HELLO) # world

# 파일에 존재하는 모든 변수 or 사용할 변수 를 import하는 방법도 있지만
# 파일을 import 하기를 권장!!!!!
  • bool() : 특정값이 True인지 False인지 확인하는 함수 -> 0 과 빈 자료형 제외 모두 True
  • enumerate() : 반복되는 요소가 몇 번째인지 확인 가능 -> index와 elements를 출력
  • 딕셔너리 반복문
products = {
    "bread": 1000,
    "milk": 3000,
    "egg": 6000,
    "drink": 1500
}

for k in products: # key만 사용할 때
    print(k)

for v in products.values(): # value만 사용할 때
    print(v)

for k, v in products.items(): # key, value 모두 사용할 때
    print(k, v)
  • continue : 특정 상황에서 아무런 동작도 하지 않고 넘어갈 수 있음 -> 해당 반복문의 다음 차례로 넘어감
  • break : 특정 상황에서 반복문을 중지시킬 수 있음 -> 반복문을 빠져나옴
  • type() : 값의 자료형 확인
  • split() : string을 '구분자'를 기준으로 list로 변환
  • join() : list를 string으로 변환 -> "요소들 사이에 들어갈 문자".join(리스트)
  • pprint() : 코드 예쁘게 출력  -> from pprint import pprint 필요
  • random : 랜덤한 로직이 필요할 때  ->  import random 필요
# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용된다.
import random

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]

random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4
  • time : 시간 다루기
# 함수의 실행 시간을 측정하는 등 시간을 다룰 때 사용되는 모듈이다.
import time

start_time = time.time() # 현재 시간 저장

time.sleep(1) # 1초간 대기

end_time = time.time()

# 코드가 종료된 시간 - 코드가 시작된 시간으로 실행 시간 구하기 (단위 : 초)
print(f"코드 실행 시간 : {end_time-start_time:.5f}") # 코드 실행 시간 : 1.00100
  • datetime : 날짜 다루기
from datetime import datetime, timedelta

# 현재 날짜 및 시간 출력
print(datetime.now()) # 2022-09-04 03:55:32.277095

# datetime의 format code, 더 제세한건 여기
'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ...  30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''

# string을 datetime 날짜로 변경하기
string_datetime = "22/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2022-12-25 13:20:00

# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04

# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2022-09-01 04:07:48.526502
  • 파이썬 과제
# main.py
from opt import *

print("계산식을 입력해주세요(예시 : 2 + 3)")
num1, op, num2 = input().split()

num1 = int(num1)
num2 = int(num2)

if op == '+':
    print(add_op(num1, num2))
elif op == '-':
    print(sub_op(num1, num2))
elif op == '*':
    print(mul_op(num1, num2))
elif op == '/':
    print(div_op(num1, num2))
else:
    print("잘못된 입력입니다.")
# opt.py
import sys


def add_op(a, b):
    return a+b


def sub_op(a, b):
    return a-b


def mul_op(a, b):
    return a*b


def div_op(a, b):
    if b == 0:
        print("0으로 나눌 수 없습니다.")
        sys.exit(0)
    return a/b

* 주의! 파일명을 operator로 했더니 계속 오류 문구가 떴다!! 그건 operator라는 함수(?)가 파이썬에 내장되어있기 때문이다. 파일명 수정하니까 해결되었다.

 

 

2. 백준 알고리즘

오늘 시간이 걸린 알고리즘 문제

arr = []
n = int(input())  # 처음 테스트 케이스 개수 입력

# 테스트 케이스 개수만큼 반복해 문자열 받기
for i in range(n):
    arr.append(input())  # 입력받은 ox문자열 리스트에 추가

for i in range(n):
    str = list(arr[i]) # ['x', 'o', ...]
    # 처음 문자 확인
    if str[0] == 'X':
        str[0] = 0
    else:
        str[0] = 1

    for j in range(1, len(str)):  # 입력받은 문자열에 대해
        if str[j] == 'X':  # 문자가 X이면
            str[j] = 0   # 점수 배열에 0 입력
        else:  # 문자가 O인 경우
            str[j] = str[j-1]+1
    print(sum(str))

 

import sys

c = int(input())
test = []
for i in range(c):
    arr = list(map(int, input().split()))
    # 학생 수 만큼 성적을 입력 받았는 지 확인
    if arr[0] != (len(arr)-1):
        print("입력 개수 오류")
        sys.exit(0)

    test.append(arr)

for j in test:
    total = 0
    avg = 0
    count = 0
    # 각 test의 평균값 구하기
    for k in range(1, j[0]+1):
        total += j[k]
    avg = total/(len(j)-1)

    # 각 test의 평균값보다 큰 학생의 수 구하기
    for k in range(1, j[0]+1):
        if avg < j[k]:
            count += 1

    print(f'{(count / (len(j) - 1) * 100):.3f}%')

 

 

3. 후기

Keep
- 알고리즘 풀 때 스스로 생각해서 풀어보기
- 배운 내용 자세히 정리
- 코딩할 때 주석달기
- 오류 내용 정리

Problem
- 코드 내용이 너무 복잡함
- 알고리즘이 복잡해지면 생각이 정리가 안 됨
Try
- 코드 단순화
- flow-chart 손으로 그려보기, 종이에 알고리즘 정리해보기

 

느낀점 : 모든 영역이 어렵다... 나는 뭐 해먹고 살지...

반응형