TIL 22.11.08 / Python 기초문법

쓰옹·2022년 11월 8일
0

2주차 둘째 날.
어제는 자바 기초문법을 공부하고 오늘 파이썬을 하니까
뭔가 코드를 다 안적은 것만 같은 느낌이 계속 들었다.
확실히 코드가 간결해졌다.
앞서서 프로젝트를 진행하며 겉핥기 식으로 본 파이썬 문법을 한 번 공부해보자.

강의에 앞서 코드는 절대 외우는게 아니라는 강사님의 말씀을 다시 한 번 마음에 새기고..

기초문법

변수선언

a = 3
b = 2

print(a**b)  #a의 b제곱. 9

정말 자바하다 파이썬 쓰니까 세상 편하네 약간 덜 쓴 느낌이다.

  • 변수: 값을 넣는 박스 == 메모리에 올려둔 값을 가리키고 있음
    • 문자열, 소수 가능.
    • 참/거짓 형도 가능
      a = (3 > 2)
      print(a) # true
      a = (3 < 2)
      print(a) # false

문자열

a = 2
b = 'a'
print(b) #변수 a가 아닌 문자열 a임

a = '2'  #문자열 -> str(2)로도 쓸 수 있음
b = 'hello'
print(a+b) #2hello

a = 2  #숫자
b = 'hello'
print(a+b) #오류 발생 
TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • 문자열과 숫자는 더할 수 없기 때문에 자료형을 맞춰줘야한다.
    • 문자열-> str( ) / 정수형 -> int( )

관련 함수

  • len( ): 문자열 길이 출력
  • slice 함수 [:숫자], [숫자:]: :이 앞에 있으면 숫자까지의 앞 부분, 뒤에 있으면 뒷부분만 출력
    • [숫자:숫자]: 범위 지정
text = 'abcdefgh'

result = text[3:]

print(result)  #defgh
  • .split(' ')[인덱스넘버]: 원소를 ' ' 안에 있는 항목을 기준으로 나눈다
myemail = 'sparta@google.com'
result = myemail.split('@')
print(result)  # ['sparta', 'google.com']

myemail = 'sparta@google.com'
result = myemail.split('@')[1].split('.')
print(result)  #['google', 'com']

자료형_리스트

  • 순서가 중요하게 값을 담음
a_list = [2, '배', False, ['사과', '감'] ]
print(a_list[3][1])  #감
  • 숫자, 문자, 참/거짓, 리스트도 담을 수 있음

관련함수

.append(): 리스트 원소 추가

a_list = [1, 2, 3, 4 ]
a_list.append(99)
print(a_list)  #[1, 2, 3, 4, 99]
  • .sort(): sorting(정렬)이 되어 출럭
    • .sort(reverse=True): 반대로 정렬되어 출력. 내림차순
a_list = [1,5,2,3,6,4]
a_list.sort()
print(a_list) #[1, 2, 3, 4, 5, 6]

a_list = [1,5,2,3,6,4]
a_list.sort(reverse=True)
print(a_list) #[6, 5, 4, 3, 2, 1]
  • (원소 in 리스트이름)
a_list = [1,5,2,3,6,4]
result = (5 in a_list)
print(result) #True

result = (99 in a_list)
print(result) #False

자료형_딕셔너리

  • key:value로 값으로 담음
a_dict = {'name':'bob', 'age':27}
print(a_dict['name']) #bob
  • 리스트와 조합되기도 함
a_dict = {'name':'bob', 'age':27, 'friend':['영희', '철수']}
print(a_dict['friend'][1]) #철수

people = [
    {'name':'bob', 'age':27},
    {'name':'john', 'age':30}
]
print(people[1]['age'])  #30
  • 원소 추가
a_dict = {'name':'bob', 'age':27, 'friend':['영희', '철수']}
a_dict['height'] = 180

print(a_dict) #{'name': 'bob', 'age': 27, 'friend': ['영희', '철수'], 'height': 180}
  • 원소 확인
a_dict = {'name':'bob', 'age':27, 'friend':['영희', '철수']}
a_dict['height'] = 180
result = ('height' in a_dict)
print(result)  #True

조건문 if

if - elif - else

money = 3800

if money > 3800:
    print('택시 타')
else:
    print('택시 못타ㅠ')
    print('그럼 뭐타지') #else의 내용물임
#택시 못타ㅠ
그럼 뭐타지

money = 1300

if money > 3800:
    print('택시 타')
elif money > 1200:
    print('버스를 타자')
else:
    print('걸어가자')
# 버스를 타자
  • 파이썬에서는 들여쓰기가 중요함
money = 5000

if money > 3800:
    print('택시 타')
else:
    print('택시 못타ㅠ')
print('그럼 뭐타지') #else의 내용물이 아님
# 택시 타
그럼 뭐타지

반복문 for

fruits =  ['사과', '배', '감']
for fruit in fruits:  #변수 이름은 아무거나 가능
    print(fruit) #사과
                 #배
                 #감
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:
    name = person['name']
    age = person['age']
    if age > 20:
        print(name, age)   

#carry 38
#ben 27
#bobby 57
#red 32
#queen 25


for i, person in enumerate(people):
    name = person['name']
    age = person['age']
    print(i, name, age)

#0 bob 20
#1  carry 38
#2 john 7
#3 smith 17
#4 ben 27
#5 bobby 57
#6 red 32
#7 queen 25


for i, person in enumerate(people):
    name = person['name']
    age = person['age']
    print(i, name, age)
    if i > 3:
        break
#0 bob 20
#1 carry 38
#2 john 7
#3 smith 17
#4 ben 27
  • enumerate(): 원소에 순서값 부여
  • break: 함수진행을 그만해라

예제

  1. 짝수 개수 출력
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 +=1
print(count)
  • 처음에 printcount+=1과 같은 줄에 넣어서 해맴
  1. 자연수 중 가장 큰 숫자 출력
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

max = 0
for num in num_list:
    if max < num:
        max = num
print(max)

함수

def

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

result = sum(1,2)
print(result) #3

예제

Q. 주민등록번호를 입력받아 성별을 출력하는 함수 만들기

def check_gender(pin):
    pin_gender = pin.split('-')[1][:1]
    if int(pin_gender) % 2 == 0:
        print('여성')
    else :
        print('남성')

check_gender('901111-1010018')  #남성
check_gender('901111-2010018')  #여성
check_gender('901111-4010018')  #여성

심화문법

튜플

:변수 = ('원소'.'소원')리스트랑 같이 순서가 있는 자료형이지만 불변함. (추가/수정 불가)

a = ('사과', '감', '배')
print(a[1])  #감

집합

:원소의 중복이 제거됨

a = [1, 2, 3, 5, 4, 5, 1, 7, 6, 7, 8]

a_set = set(a)
print(a_set)  #{1, 2, 3, 4, 5, 6, 7, 8}
  • 교집합, 차집합, 합집합 가능
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) #차집합 {'수박', '감'}

f-string

f'문자열에 {중괄호}로 변수를 넣어주면 됨'

scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
    {'name':'기찬','score':75},
]
for s in scores:
    name = s['name']
    score = s['score']
    print(name+'의 점수는 '+ str(score) +'점입니다.')
    print(f'{name}의 점수는 {score}점입니다.') #위와 같은 값이 나옴

예외처리 try-except

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
for person in people:
    if person['age'] > 20:
        print(person['name']) #에러발생

  • bobby는 age 값이 없기 때문에 에러가 발생함. 이럴 때 사용
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
for person in people:
    try:
        if person['age'] > 20:
            print(person['name'])
    except:
       print(person['name'], '에러입니다')
  • 남용하면 실행은 되는데 무슨 에러가 나는지 모르기 때문에 웬만해서는 안쓰는게 좋다..

파일불러오기

  • 파일을 분리해서 간단하게 적용하려면
from 불러올파일이름 import *
  • * 들어가는 부분에 함수 이름을 넣어도 가능하다그렇게 하면 다른 함수는 적용 안됨.

if문 - 삼항연산자

  • 삼항연산자 : 항이 3개. (참일 때 값) if (조건) else (거짓일 때 값)
  • if문을 삼항연산자를 사용하여 한 줄로 작성 가능
result = '짝수' if num % 2 == 0 else '홀수'
  • 괄호가 없어도 가능

for문 축약

a_list 각 요소에 2를 곱한 새로운 리스트 만들기

  • for문을 한 줄로 축약 가능

리스트 원소 조작

map, filter, lamda

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 '청소년'

result = map(check_adult, people)
print(list(result))  #['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

    people을 하나하나 돌면서 check_adult함수에 넣고 그 결과값을 리스트로 묶어라

lamda x: 표현식

리스트를 하나씩 돌면서 person(or x)에다가 넣을 건데 그 person(or x)를 가지고 표현식을 리턴해라

filter

: map과 유사한데 True인 것들만 뽑음

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}
]

result = filter(lambda x: x['age'] > 20, people)

print(list(result))
# [{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]

함수 매개변수

def cal(a,b):
    return a+2*b

result = cal(b=2, a=1)   #지정함. 순서를 안 맞춰도 됨
print(result)  #5
def cal(a,b=2):   #기본 값 지정
    return a+2*b

result = cal(1)   #b를 넣지 않으면 기본값으로 결과출력
print(result)     #5

result = cal(1 ,3) #넣으면 넣은 값으로 출력
print(result)     #7

*args

: 변수를 무제한으로 넣을 수 있음

def cal(*args):
    for name in args:
        print(f'{name} 밥먹어라~')
cal('영수', '청수')

#영수 밥먹어라~
#청수 밥먹어라~

**kwargs

: 인자를 지정해서 딕셔너리로 많이 넣어줄 수 있음

def cal(**kwargs):
    print(kwargs)

cal(name='bob', age = 30, height = 180)
# {'name': 'bob', 'age': 30, 'height': 180}
  • *args**kwargs는 라이브러리 사용 시 많이 있을 수 있다



마무리

오늘은 파이썬 문법에 대해 뭘 많이 배운 것 같다.
아직 머리에 다 들어오진 않아서 복습이 필요할 것 같지만
자바와 비슷한 부분이 있어서 그래도 이해하는 데 어려움은 없었다.
파이썬은 코드가 간단간단해서 실수하기 좋을 것 같다.
이미 강의를 예제를 풀며 코드를 칠 때 들여쓰기가 안맞는 실수를 했다..ㅎ
자바던 파이썬이던 실수를 제일 조심해야할 것 같다.
너무 당연한 말인가..ㅎ

profile
기록하자기록해!

0개의 댓글