1-2. 파이썬 시작하기
파이썬이란 우리의 언어를 컴퓨터 언어로 바꿔주는 일종의 번역팩
읽기 쉽게 만든 언어
초보자들에게 진입장벽 낮다
무료/오픈 소스로 운영되고 커뮤니티가 커서 직접 구현하기 힘든 기능 다른 개발자의 라이브러리를 이용해 쉽게 코딩할 수 있다.
파일 생성
프로젝트 생성
초록색 실행버튼은 클릭하면 실행이 되지만 가끔 내가 보고 있는 파일이 아닌것을 실행해 줄 때가 있다.
1-3. 변수 선언과 자료형
변수 선언 (변수의 값은 정수, 소수, 문자열, boolean, 비교 연산자 )
a = 2 # 2를 a에 넣는다.
print(a)
b = a # b에 들어있는 값인 2를 b에 넣는다.
a = 7 #a에 새로운 값을 넣어준다
print(a, b) # 결과 7, 2 프린트
숫자형
사칙연산, 나머지 구하기, 제곱
a = 3
b = 5
print(a+b)
print(a-b)
print(a/b)
print(a*b)
print(a**b) #제곱
print(a%b) #나머지
Bool 자료형
비교연산자 결과로 나타내기 위해 쓴다 >/ </ ==/ >=/ <=/
논리연산자를 이용할 수 있다.and/ or/ not
a = True #T가 대문자여야 된다.
print(a) #결과 True
a = (3 > 2)
print(a)
b = (2 == 3)
print(b)
c = (2 > 3)
print(c)
#변수에 값을 할당한다는 것의 의미
a =2 란 2를 지칭할 수 있도록 a라는 박스에 넣어준다. a는 2라는 값을 가리키고 있다.
메모리에 올려둔다고 표현
- Q. 숫자들의 평균 구하기
a=24
b=16
c=26
print((a+b+c)/3)
1-4. 문자열 다루기
작은 따옴표, 큰따옴표
a = 2
b = 'a'
print(b) #결과는a
a = 2
b = a
print(b) #결과는 2
a = 2
b = 'hello'
print(a + b) #에러남
숫자 2 와 문자열 '2'는 다르다
숫자와 문자열은 연산할 수 없다
str()
b = str(2) #숫자를 문자열로 바꿔주는 코드
인덱싱과 슬라이싱
문자열은 '문자들의 모임'이기 때문에 그 일부를 따로 떼어 부르는 방법이 있습니다. 한 글자 씩 부를 때는 몇 번째인지 '인덱스'를 넣어 불러서 인덱싱이라고 합니다.
문자열의 일부를 잘라낼 때는 슬라이싱이라고 해요.
text = 'abcdefghijk'
result = len(text) # 텍스트 길이 구한다
print(result)
print(text[0]) #[0]에 해당하는 문자열 보여준다
print(text[:3]) #[3]까지 #여기서부터는 슬라이싱에 해당
print(text[3:]) #[3]부터 끝까지
print(text[5:8]) #[5]부터 [8]까지
print(text[:]) #처음부터 끝까지
.split('')
(특정 문자열로 슬라이싱)
myemail = 'tjsgud2564@naver.com'
print(myemail.split('@')) #문자를 쪼갤 때 쓴다.
print(myemail.split('@')[0])
print(myemail.split('@')[1])
print(myemail.split('@')[1].split('.'))
print(myemail.split('@')[1].split('.')[0])
- Q. 문자열의 앞의 반만 출력하기
"sparta"의 앞의 3글자인 "spa"만 출력해봅시다.
text = 'sparta'
result = text[:3]
print(result)
- Q. 전화번호의 지역번호 출력하기
phone = "02-123-1234"
result = phone.split('-')[0]
print(result)
1-5. 리스트와 딕셔너리
리스트
리스트명 = ['', '', '']
a_list = [2, '사과', False, ['배', '귤']]
# 리스트에 들어갈 수 있는 것들
# 숫자, 문자열, Boolean, 리스트
result = a_list[3][1]
a_list = [3, 5, 1, 4, 2, 8]
a_list.append(99)
a_list.append(80) #리스트에 추가
a_list.sort() # 리스트 안의 데이터를 오름차순으로 정렬
a_list.sort(reverse=True) #내림차순 정렬
print(a_list)
print(a_list[5:7]) #믄자열 뿐만 아니라 리스트에서도 쓴다
print(a_list[-1]) #마지막 데이터 불러오기
print(len(a_list)) #리스트 길이 구하기
a_list = [3, 5, 1, 4, 2, 8]
result = (3 in a_list) #데이터가 리스트 안에 있는지 확인한다
print(result)
딕셔너리
딕셔너리명 = { '', '', '' }
키(key): 값(value)
순서가 없다
a_dict = {'name':'wandu', 'age':9, 'food':['건사료', '습식사료']}
a_dict['speices'] = 'korean short hair' #새로운 데이터 넣는다
print(a_dict['name'])
print(a_dict['age'])
print(a_dict['food'][0])
print('speices' in a_dict)
리스트 안에 딕셔너리
cats =[
{'name':'wandu', 'age':9,},
{'name':'jadu', 'age':8,}
]
print(cats)
print(cats[1]['age'])
- Q. 딕셔너리에서 원하는 정보를 찾아보기
people = [
{'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
{'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
{'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
{'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]
print(people[2]['score']['science'])
1-6. 조건문
파이썬 문법에서 들여쓰기는 엄청 중요하다
뭐가 어디에 포함되어있는지를 나타내기 때문이다.
: 콜론은 그러면 이라는 의미를 가진다
if, elif, else
money = 3000
if money > 5000:
print('택시를 타자!')
elif money > 3000:
print('지하철을 타자')
elif money > 1200:
print('누비자를 타자')
else:
print('걸어가자')
print('그럼 뭘타?')
#마지막 줄은 들여쓰기 안 되어있어서 조건문에 들어가지 않았다.
#조건과 관계없이 계속 프린트된다.
1-7. 반복문
for ~ in ~s
반복되는 내용을 계속 써주기 힘드니까 사용한다.
fruits = ['사과','배','감','수박','딸기']
for fruit in fruits:
print(fruit)
- Q. 사람의 나이 출력하기
리스트 안에 딕셔너리가 들어가 있고, 반복문으로 데이터를 다 뽑아주고, 조건문으로 걸러서 결과를 낸다.(굉장히 전형적인 패턴)
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for person in people:
if person['age'] > 20:
print(person['name'], person['age'])
#Shift + tab (tab 되돌리기)
for문 - enumerate, break
for i, 리스트 낱개명 in enumerate(리스트명):
뽑아낼 내용
if i > 2:
break
너무 많은 개수의 데이터를 가지고 코딩을 할 때
이 기능을 가지고 반복문을 중간에 멈춰서 결과를 짧게 출력해줄 수 있다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for i, person in enumerate(people): #각각의 데이터에 숫자를 붙여준다
name = person['name']
age = person['age']
print(i, name, age)
if i > 2: # 데이터 번호가 2 이상일 때 엄춰라
break
1-8. 반복문 - 연습문제
#print()를 조건문에서 빼주어 마지막 결과만 출력하면 된다. (그전에 그렇게 하지 않아서 수정)
Q. 리스트에서 짝수만 출력하는 함수 만들기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
b_list = []
for num in num_list:
if num % 2 == 0:
b_list.append(num)
print(b_list)
Q. 리스트에서 짝수의 개수를 출력하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
b_list = []
for num in num_list:
if num % 2 == 0:
b_list.append(num)
print(len(b_list))
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
count = 0
for num in num_list:
if num%2 == 0:
count = count + 1
print(count)
Q. 리스트 안에 있는 모든 숫자 더하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
total = 0
for num in num_list:
total += num
print(total)
Q. 리스트 안에 있는 자연수 중 가장 큰 숫자 구하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
num_list.sort()
print(num_list[-1])
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
print(max(num_list))
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
max_num = 0
for num in num_list:
if num > max_num:
max_num = num
print(max_num)
1-9. 함수
같은 동작을 할 때 쓴다.
def cheerup():
print('안녕')
print('오늘도 열심히네?')
print('고생이 많아')
cheerup()
def sum(a,b):
return a+b
result = sum(1,2)
print(result)
def bus_rate(age):
if age > 65:
print('버스비가 무료입니다')
elif age >20:
print('성인 요금을 내세요')
elif age > 13:
print('청소년 요금을 내세요')
elif age > 7:
print('어린이 요금을 내세요')
else:
print('버스비가 무료입니다.')
bus_rate(15)
bus_rate(5)
bus_rate(26)
bus_rate(90)
bus_rate(10)
def bus_rate(age):
if age > 65:
return 0
elif age > 20:
return 1700
elif age > 13:
return 1200
elif age > 7:
return 500
else:
return 0
print(bus_rate(15))
print(bus_rate(26))
print(bus_rate(90))
print(bus_rate(10))
print(bus_rate(4))
- Q. 주민등록번호를 입력받아 성별을 출력하는 함수 만들기
내가 쓴 코드
def check_gender(num):
gender_num = num.split('-')[1][:1]
if gender_num == '2':
print('여자입니다')
elif gender_num == '4':
print('여자입니다')
elif gender_num == '1':
print('남자입니다')
elif gender_num == '3':
print('남자입니다')
강의자료 답 (나머지 연산을 이용하면 간단)
def check_gender(num):
gender_num = num.split('-')[1][:1]
if int(gender_num) % 2 == 0:
print('여성입니다')
else:
print('남성입니다')
2-1. 파이썬 문법 뽀개기 - 심화
쓸만한 것도 있고, 알아두기만 해도 괜찮은 것들도 나올 것
2-2. 튜플, 집합
튜플 tuple
리스트랑 똑같이 생겼는데 불변이다.
소괄호 안에 넣어준다.
튜플 명 = ( , , ,)
a = (1,2,3)
a[0] = 99 # 에러가 난다. 튜플을 데이터 수정이 불가하기 때문
a_dict = [('bob','24'),('john','29'),('smith','30')]
# 딕셔너리 대신에 튜플로 딕셔너리 비슷하게 만들어야 할 때 많이 쓰인다.
집합 set
set()
중복을 제거해준다
a = ['호두', '완두', '자두', '삐두', '황두']
b = ['완두', '밤두' , '호두','두두', '치두']
a_set = set(a)
b_set = set(b)
print(a_set & b_set) #교집합
print(a_set | b_set) #합집합
print(a_set - b_set) #차집합
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
a_set = set(student_a)
b_set = set(student_b)
print(a_set - b_set)
2-3. f-string
변수로 더 직관적인 문자열 만들기
변수명을 문자열과 쉽게 섞어주는 방법
f ' {변수명}과 문자열 '
scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]
for sco in scores:
name = sco['name']
score = sco['score']
print(f'{name}의 점수는 {score}점입니다.')
#score을 str으로 문자로 바꿔주지 않았는데 오류 없이 실행된다.
print( name + '의 점수는 ' +str(score)+ '점입니다' )
2-4. 예외처리
try:
조건문
except:
에러나면 대신 나타낼 내용
에러가 있어도 건너뛰게 할 수 있는 방법
내 파일의 오류가 아니라 서버의 오류인 경우 구별하기 위해서 사용한다
남용하면은 에러가 나는데 계속 작동하기 때문에 에러를 찾기어려워 질 수 있다.
웬만하면 쓰지마라
for person in people:
try:
if person['age'] > 20:
print (person['name'])
except:
print(person['name'], '에러입니다')
2-5. 파일 불러오기
깔끔하게 파일 분리하는 법
main_func.py
def say_ilu():
print('사랑해')
def say_ilu_to(name):
print(f'{name}를 사랑해')
main_test.py
from 파일명 import 함수명 or *(전체)
from main_func import * #main_func.py에서 전체파일을 불러온다
from main_func import say_ilu_to, say_ilu
#app.py에 라이브러리 import할 떄 쓰는거다!
say_ilu()
say_ilu_to('완두')
say_ilu_to('자두')
2-6. 한줄의 마법
축양형 만드는 법
if문 줄이기
기존에 하던 방식
num = 3
if num % 2 == 0 :
result = '짝수'
else:
result = '홀수'
print(f'{num}은 {result}입니다')
한줄의 마법
num = 3
result = ('짝수' if num % 2 == 0 else '홀수') #괄호가 없어도 된다.
print(f'{num}은 {result}입니다')
for문 줄이기
기존 방식
a_list = [1,3,2,5,1,2]
b_list = []
for a in a_list:
b_list.append(a*2)
print(b_list)
# print를 조건문 바깥에 두어 마지막으로 완성된 리스트만 불러온다.
#for문으로 뽑아낸 데이터들을 새로운 리스트에 넣는 방법
이걸 보니까 아까 퀴즈에서 실수 했다는 것을 알겠다.
한줄의 마법
a_list = [1,3,2,5,1,2]
b_list = []
b_list = [a*2 for a in a_list]
print(b_list)
여기서부터 조금 어려울 수 있다.
2-7. map, filter, lambda식
map - 리스트의 모든 원소를 조작하기
result = map(함수명, 리스트명)
1차 조작 - 반복문 대신 map 이용하기
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
#반복문으로 person을 뽑아주지 않은 상태이다
result = map(check_adult, people)
#people을 반복문처럼 돌려주면서 check_adult에 하나씩 넣어라
print(list(result))
#list 해주지않고 그냥 print 하면 <map object at 0x0000022156394DF0>이런 코드가 뜬다
# map을 이용한 데이터들을 list 해주지않고 그냥 print 하면 <map object at 0x0000022156394DF0>이런 코드가 뜬다
2차 조작- if문 축약해주기
def check_adult(person):
return ('성인' if person['age'] >20 else '청소년')
result = map(check_adult, people)
print(list(result))
lamda
3차 조작 lamda를 이용해서 함수를 쓰지 않고 바로 조건을 넣어주었다.
map(lamda 리스트 낱개 이름 : if문, 리스트명)
result = map(lambda person: ('성인' if person['age'] >20 else '청소년'), people)
print(list(result))
filter - 리스트의 모든 원소 중 특별한 것만 뽑기
map이랑 거의 비슷한데 True 인 것만 뽑는다.
filter(lambda x:x 조건, 리스트명)
(관용적으로 x를 많이 사용한다)
result = filter(lambda x: x['age'] >20, people)
print(list(result))
2-8. 함수 심화
함수의 매개변수 (매개변수에 값을 정확하게 할당해주는 것)
직접쓰기보다는 내장함수 등을 이용할 때 도큐먼트를 읽는데 도움이 된다.
1. 일반함수
def cal (a,b):
return a+2*b
result = cal(1,2)
print(result)
2.값을 넣어줄 때 매개변수에 지정해서 넣어준 것
result = cal(b=2,a=1)
print(result)
3.함수 만들 때 매개변수에 값을 이미 할당해준 것
def cal (a,b=2):
return a+2*b
result = cal(1)
print(result)
함수에 값을 할당했더라도, 내가 새로운 값을 넣어주면 그 값을 적용해준다
result = cal(1,3)
print(result)
4. 입력값 개수를 지정하지 않고 모두 받는 방법
*arg
관례적으로 arg를 쓰는거지 arg만 써야하는건 아니다
*부분이 더 중요
def cal(*args):
for name in args:
print(f'{name} 양치해라~') #for문으로 args리스트에 있는 데이터를 다 뽑아준다
cal('선린','선우','고양이','강아지') #cal 함수에 들어갈 값들
5. 키워드 인수를 여러개 받는 방법
받아온 데이터를 딕셔너리 형태로 만들어준다
**kwargs
앞쪽의 **이 중요하고 이름은 사실 마음대로 정해도 된다
def cal(**kwargs):
print(kwargs)
cal(name='선형', age =27, height=162)
cal(name='선린', age=21, height=156)
2-9. 클래스
언제 사용하는지를 아는것이 어떻게 사용하는지를 아는 것 보다 더 중요
뱀의 HP를 중앙에서 관리하는것 vs 각각 HP를 가지고 있는것 뭐가 더 나을까?
나는 여러마리일 수록 중앙에서 관리하는게 편할것 같다고 생각했는데 아니었다.
각각이 가지고 있는데 더 낫다. 이런 것을 객체지향적 이라고 한다.
1.물체에 물체에 관련된 속성을 넣는다.
2. 컨트롤할 함수를 만들어 붙인다
3.중앙에서는 함수만 불러들이면 객체들이 관리가 된다.
self는 javascript의 this와 비슷한 건가? 구글링해보니까 비슷한거 맞는 것 같다.
class Monster():
hp = 100
alive = True
def damage(self, attack): #damage함수는 파이썬 내장함수이다.
self.hp -= attack
if self.hp < 0:
self.alive = False
def status_check(self):
if self.alive == True:
print('살았다')
else:
print('죽었다') #여기까지가 클래스
m1 = Monster() #m1을 인스턴스라고 부른다
m1.damage(150)
m1.status_check()
m2 = Monster()
m2.damage(50)
m2.status_check()
'개발자 되는 중 > 개발 공부' 카테고리의 다른 글
스파르타 리액트 입문 (0) | 2022.12.14 |
---|---|
스파르타 React 숙련 (0) | 2022.12.14 |
스파르타 Javascript 기초 (0) | 2022.12.14 |
웹 개발 특강 (0) | 2022.12.14 |
SPA 특강 (1) | 2022.12.14 |