본문 바로가기

TIL 및 WIL/TIL (Today I Learned)

[TIL] 2022.04.25 (Python 문법 기초1)

잠깐, Python이란 무엇일까?

다시 한번 알아보고 가자.

 

파이썬(Python)이란?
- 누구나 배우기 쉽고 간단하게 이루어진 오픈 소스 프로그래밍 언어이다.
- 빠른 개발 속도를 가졌기에 C, Java와 같은 프로그래밍 언어보다 개발 시간이 단축된다는 장점이 있다.
- 코드가 간결하고 쉬운 문법으로 이루어져 있으며, 다양한 라이브러리를 지원한다.
- C, C++, Java 등의 프로그래밍 언어들과 잘 어우러진다.

 

오늘은 이러한 Python의 기초적인 문법에 대해 공부하였다.

 

1. print()

print("Hello Python")

print()

 

해당 문구는 파이썬에서 출력을 담당하고 있다.

print() 안에 "Hello Python"이라는 문구를 넣어주니 해당 문구가 출력되는 것을 확인할 수 있었다.

 

2. 산술 연산자

a = 3
b = 2
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** b)
print(a % b)

산술 연산자

 

덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 제곱(**), 몫(//), 나머지(%) 등의 산술 연산자를 다룬다.

변수로 선언된 a와 b의 값에 대한 연산 값을 출력해주는 모습이다.

 

변수에는 해당 정수형 값뿐만 아니라 다음과 같이 소수점이 있는 실수나 문자열, True or False의 값도 출력이 가능하다.

 

a = 11.5
b = "나"
c = True
print(a)
print(b)
print(c)

실수형 변수, 문자열, True값 출력

 

3. 비교 연산자

a = (3 > 2)
b = (3 < 2)
c = (3 == 2)
d = (3 != 2)
print(a, b, c, d)

비교 연산자

 

비교 연산자를 통해 해당 값이 비교 연산자에 맞게 맞는가?(True) 틀린가?(False)의 값을 알아볼 수 있다.

해당 값이 같다(==), 아니다(!=), 크거나 작다(>, <), 같거나 크고 같거나 작다(>=, <=)에 해당하는 것인지 알 수 있다.

 

4. 비트 연산자(집합)

a = ['사과','배','감','포도','수박']
b = ['사과','감','자몽','귤','수박']

a_set = set(a)
b_set = set(b)

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) # 차집합

비트 연산자(집합)

 

비트 연산자를 통해 해당 리스트(a와 b, student_a와 student_b)의 집합을 알아볼 수 있었다.

해당 리스트들에 교집합(&), 합집합(|), 차집합(-)을 사용하여 각각의 집합을 구할 수 있다.

 

5. 문자열

1)
a = '너'
b = '구리'
c = str(92)
print(a + b)
print(a + c)

#####################################

2)
a = 'abcdefghijk'
ex1 = len(a) # 최대 길이
print(ex1)
ex2 = a[:3] # 3번째 까지만
ex3 = a[3:] # 3번째 이후부터
ex4 = a[3:6] # 3번째부터 6번째까지
print(ex2, ex3, ex4)

#####################################

3)
a = 'umjunsik@gmail.com'
ex1 = a
ex2 = a.split('@')
ex3 = a.split('@')[1]
ex4 = a.split('@')[1].split('.')
ex5 = a.split('@')[1].split('.')[0]
print(ex1, ex2, ex3, ex4, ex5)

문자열

 

1)

해당 변수에 문자열의 값을 담아준 뒤 산술 연산자를 통해 출력하면 해당 문자열이 합쳐진 결과로 출력된다.

c = str(92)는 숫자인 92를 str(String)의 문자열 형태로 담는다는 의미이다.

 

2)

len(a)를 통해 문자열의 총길이가 얼마나 되는지 변수 ex1에 담아준다.

a[:3]은 해당 문자열에서 1번째부터 3번째까지의 문자열만 표시하게 할 수 있고, a[3:]은 3번째 이후부터의 문자열을, 둘을 합친 a[3:6]에서는 3번째 이후부터 6번째까지의 문자열을 출력해준다.

 

3)

.split('@')를 통해 @를 기준으로 자른 뒤, 기준으로 나눠진 값을 리스트의 형태로 담아준다.

해당 결과를 확인하기 위해 1번째(리스트는 0번째부터 시작) 값을 확인해본 결과 잘린 부분의 n번째 값이 출력되는 것을 확인할 수 있었다.

해당 리스트에 대한 것은 밑에서 다뤄보겠다.

 

6. 리스트(List)

# 리스트
a_list = ['사과', '배', '감', ['사과', '배']]
print(a_list, a_list[3][1])

b_list = [1, 2, 3, 4, 5]
b_list.append(10)  # 리스트에 값 추가
print(b_list)

c_list = [1, 2, 3, 4, 5]
c1 = c_list[-1]
c2 = len(c_list)
print(c1, c2)

d_list = [1, 4, 3, 2, 5]
d_list.sort()  # 오름차순, .sort(reverse=False)로 적어줘도 가능
print(d_list)

e_list = [1, 4, 3, 2, 5]
e_list.sort(reverse=True)  # 내림차순
print(e_list)

f_list = [1, 4, 3, 2, 5]
f1 = (5 in f_list) # 해당 리스트의 값에 5가 있는가? True or False
f2 = (6 in f_list) # 해당 리스트의 값에 6이 있는가? True or False
print(f1, f2)

리스트(List)

 

리스트는 하나의 변수에 여러 가지 많은 요소들을 넣어주기 위해 사용되는 자료형 변수이다.

[ ]의 형태를 띠고 있으며, 0번째부터 시작하여 n번째까지 저장된다.

 

해당 문구에서 .sort()와 .sort(reverse=True)는 해당 리스트에 있는 요소들을 오름차순과 내림차순의 순서로 정렬해주는 것이다. (.sort() = .sort(reverse=False))

 

f1 = (5 in f_list)를 보면 해당 리스트에 5가 들어 있는가? 를 물어보는 것이다.

해당 결과를 출력하면 리스트에 5가 들어있기에 True로 표시되고, 밑에 있는 f2 = (6 int f_list)는 리스트 안에 6이 없기에 False로 출력된다.

 

7. 딕셔너리(Dictionary)

# 딕셔너리
a_dict = {'name': 'junsik', 'age': 32, 'sex': ['남자', '여자']}
a1 = a_dict['name']
a2 = a_dict['age']
a3 = a_dict['sex'][0]
print(a1, a2, a3)
a_dict['height'] = 170
print(a_dict)
a4 = ('height' in a_dict)
print(a4)

# 딕셔너리 응용
people = [
    {'name': 'jun', 'age': 27},
    {'name': 'sik', 'age': 32}
]
print(people)
print(people[1])
print(people[1]['age'])

딕셔너리(Dictionary)

 

딕셔너리는 하나의 변수에 key값을 지니고 있는 여러 개의 요소를 넣어주기 위해 사용되며, { }의 형태를 띠고 있다.

 

새로운 key값을 추가하거나, key값을 이용하여 해당 값을 불러오는데 용이하게 사용된다.

 

8. 튜플(Tuple)

# 튜플
a = ('사과','배','감','포도')
print(a[1])

# 튜플 ERROR
a[1] = '수박'
print(a[1])

튜플(Tuple)

 

튜플은 리스트와 비슷한 형태이지만 변하지 않는 변하지 않는 불변형의 자료형이며, ( )의 형태를 띠고 있다.

해당 코드를 보면 알 수 있다시피 a[1] = '수박'으로 바꾸려고 한다면 Error가 발생하는 것을 볼 수 있다.

 

9. 조건문(if, elif, else)

# 조건문
money = 1300
if money > 3800:
    print('택시')
elif money > 1200:
    print('버스')
else:
    print('어떡하지!')

조건문(if, elif, else)

 

조건문은 보통 if - else의 형태로 사용되며, 추가적인 조건을 넣고 싶다면 elif를 사용하여 조건을 추가하기도 한다.

해당 코드처럼 money = 1300에 부합하는 조건이 elif  money > 1200: 밖에 없기에 해당 조건이 출력되는 것을 볼 수 있다.

 

10. 반복문(for, while)

# 반복문
fruits = ['사과', '배', '감', '수박', '딸기']
for a in fruits:
    print(a)

int_num = 0
while (int_num < 5):
    int_num += 1
    print(int_num)

반복문(for, while)

 

반복문은 for문과 while문으로 구성되어 있다.

 

for문을 예시로, 해당 코드에서 fruits = [ ] 리스트의 요소들을 변수 a에 담아서 반복하여 출력해준다.

출력 결과를 보면 fruits = [ ] 리스트에 모든 값이 하나씩 출력되고, 마지막 n번째 값을 끝으로 for문이 종료되는 것을 볼 수 있다.

 

while문을 예시로, 해당 코드에서 int_num의 값이 5보다 클 경우까지 해당 코드를 계속 반복하는 경우이다.

출력 결과를 보면 알다시피 int_num의 값이 5를 넘어갔기에 해당 while문이 종료된 것을 볼 수 있다.

 

다음은 if문과 for문을 조합하여 짧게 만든 코드 연습 예제이다.

 

11. if문 + for문 연습

people = [
    {'name': 'um', 'age': 32},
    {'name': 'jun', 'age': 28},
    {'name': 'sik', 'age': 24},
]
for b in people:
    name = b['name']
    age = b['age']
    # print(name, age)
    if age > 25:
        print(name,age)

people = [
    {'name': 'um', 'age': 32},
    {'name': 'jun', 'age': 28},
    {'name': 'sik', 'age': 24},
    {'name': 'Ra', 'age': 12},
    {'name': 'coon', 'age': 8},
]
for i, person in enumerate(people): # 해당 리스트에 번호를 매김
    name = person['name']
    age = person['age']
    print(i, name, age)
    if i > 2:
        break

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
# 짝수 값 출력
for num in num_list:
    if num % 2 == 0:
        print(num)
# 짝수 값의 총 갯수 출력
count = 0
for num in num_list:
    if num % 2 == 0:
        count += 1
print(count)

# 리스트 내의 값 모두 합쳐서 출력
sum = 0
for num in num_list:
    sum += num
print(sum)

# 해당 리스트의 값 중 제일 높은 값 출력
max = 0
for num in num_list:
    if max < num:
        max = num
print(max)

for문 연습 예제

 

12. 함수(def)

# 함수
def hello():
    print('안녕?')
    print('나는 함수야.')
hello()

def sum(a,b):
    print('해당 더하기 값은?')
    return a+b
result = sum(1,2)
print(result)

def bus(age):
    if age > 65:
        print('무료')
    elif age > 20:
        print('성인')
    else:
        print('청소년')
bus(25)

def check_gender(pin):
    num = pin.split('-')[1][:1] # - 를 기준으로 1번째 열의 첫번째 글자
    if int(num) % 2 == 0: # 들어있는 값이 문자이기 때문에 int(정수)로 바꿔줌
        print('여성')
    else:
        print('남성')
check_gender('123456-1234567')
check_gender('123456-2234567')

함수(def)

 

함수란, 코드의 반복을 줄이고 해당 코드들을 쓰기 좋은 형태로 모아놓은 것이라고 정의할 수 있다.

함수를 사용하면 함수로 지정한 뒤 해당 코드를 사용할 때가 오면 해당 함수에 적힌 코드들을 호출하여 사용할 수 있다.

 

13. f_string

scores = [
    {'name':'라쿤','score':70},
    {'name':'너구리','score':65},
    {'name':'엄준식','score':75},
    {'name':'준식이','score':23},
    {'name':'진우','score':99},
    {'name':'지누','score':100},
    {'name':'알밥','score':32}
]
for s in scores:
    name = s['name']
    score = s['score']
    # score에 있는 값이 정수(int)이기 때문에, 출력 시 문자열(str)로 바꿔줌
    print(name+'의 점수는 '+str(score)+'점입니다.')
    # f_string 사용 시 아래처럼 간결해짐
    print(f'{name}의 점수는 {score}점입니다.')

f_string

 

f_string은 문자열에서 특정 부분에 대한 값을 문자열 포매팅을 해주어 간결하게 출력할 수 있게 해주는 것이다.

 

딕셔너리 값으로 주어진 key값 중 score에 해당하는 부분은 정수형으로 지정되어 있는 것을 알 수 있다.

해당 정수를 print(name+'의 점수는'+score+'점입니다.')의 형태로 출력하게 되면 정수형이기 때문에 Error가 발생하게 되는데, 이것을 같은 문자열의 형태인 print(name+'의 점수는'+str(score)+'점입니다.')로 바꿔줘야 한다.

여기서 f_string을 사용하면 print(f'{name}의 점수는 {score}점입니다.)의 형태로 간결하게 사용하여 출력할 수 있다.

 

14. 예외처리(try - except)

# 예외처리 (try - except)
people = [
    {'name': '라쿤', 'age': 20},
    {'name': '너구리', 'age': 38},
    {'name': '엄준식', 'age': 7},
    {'name': '준식이', 'age': 17},
    {'name': '진우', 'age': 27},
    {'name': '지누'},
    {'name': '알밥', 'age': 32},
    {'name': '우진', 'age': 25}
]
for person in people:
    try:
        if person['age'] > 20:
            print(person['name'])
    except:
        print(person['name'], '!!에러 발생!!')

예외처리(try - except)

 

코드를 만들다 보면 높은 확률로 오류가 발생한다.

물론 오류가 발생하면 해당 프로그램이 잘못 동작하는 것을 막아주기 위한 것도 있지만, 이러한 오류를 무시하고 동작하도록 하는 것이다.

해당 예외처리(try - except)를 통해 오류가 일어난 부분에서 예외적으로 오류를 처리하고 넘어가게끔 만들어준다.

 

코드를 보면 알다시피 people 딕셔너리 값에서 'name' : '지누'의 'age' 값이 빠져있는 것을 볼 수 있다.

예외처리를 하지 않은 상태로 진행하면 오류가 발생하여 프로그램이 종료되는 것을 확인할 수 있는데, 이렇게 일어난 오류를 처리하고 넘어가고 싶다면 try - except를 사용하여 다음과 같이 처리할 수 있다.

 

-

 

오늘은 파이썬 기초 문법들에 대해 조금 알아보았다.

현재 파이썬 게임 만들기라는 개인 프로젝트를 같이 겸하여 진행하고 있기에 나머지 기초 문법들은 내일 공부해보고자 한다.

 

그래도 열심히 공부하며 발전하고 있는 중이어서 그런지 꽤 만족스럽다는 느낌이다.

 

:D