개발자 되는 중/개발 공부

스파르타 Python 기초

SeonChoco 2022. 12. 14. 20:59

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