반응형
스파르타 코딩클럽 내일배움캠프 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 손으로 그려보기, 종이에 알고리즘 정리해보기
느낀점 : 모든 영역이 어렵다... 나는 뭐 해먹고 살지...
반응형
'개발일지 > AI 캠프' 카테고리의 다른 글
내일배움캠프 AI - 9일차 TIL, 2022.09.08 (0) | 2022.09.13 |
---|---|
내일배움캠프 AI - 8일차 TIL, 2022.09.07 (0) | 2022.09.08 |
내일배움캠프 AI - 6일차 TIL, 2022.09.05 (0) | 2022.09.06 |
내일배움캠프 AI - 1주차 WIL (1) | 2022.09.04 |
내일배움캠프 AI - 5일차 TIL, 2022.09.02 (0) | 2022.09.02 |