[Python] 기본 문법 후루룩

dsunni·2020년 7월 9일
8

코딩테스트 준비를 위한 기본 문법 후루룩

  • 파이썬은 인터프리터 방식의 언어이다.
  • 한 문장 입력시 바로 실행 가능
  • 오류 발생 전까지의 코드를 실행 가능

입출력, 변수 등

# 출력
print('5')

# 변수 & 입력
age = input('당신의 나이는? : ')
print(age)

# 리스트
my_list = [1, 2, 3]
students = ['일', '이']
print(students)

import random
print(random.choice(students))

students[0] = '강'
print(students)

# 튜플은 값을 바꿀 수 없다.
my_tuple = ('튜', '플')
print(my_tuple)

# Dictionary {key, val}
my_dict = {'나': '여', '강동원': '남'}
print('dictonary = ' + my_dict['나'])

# type 확
my_str = "김씨가족"
print(my_str)
print(type(my_str))

# 출력의 끝 지정
print('집단지성 ')
print('집단지성 ', end='')
print('enter가 안들어감')
# 집단지성
# 집단지성 enter가 안들어감

# Escape code
print('미운 코딩 새끼의\n 집단지성들')
  • 기본 print는 끝에 Enter가 들어간다. Enter를 원하지 않을 때 end를 지정해주면 된다.
    • Default는 end에 '\n'이들어가있다.


문자열

# 문자열 줄바꿈 표시
my_str = """제스퍼
토미
메타
"""

# 문자열 -> 문자열 리스트
my_str = "coding"

# 포맷 메소드 사용 ('{}' .format() )
my_str = 'My name is {}'.format('커피')
my_str = 'aaa {}'.format('1, 2, 3.14')

my_str = '{} x {} = {}'.format(2, 3, 2*3)
# 2 x 3 = 6

my_str = '{1} x {0} = {2}'.format(2, 3, 2*3)
# 3 x 2 = 6

# 인덱싱
str = '배고프네요'
print(str[1])

# Slicing
myname = '김왼손의 왼손코딩'
print(myname[5:7])
print(myname[:3])

# string.split()
myname = '김왼손의 왼손코딩'
print(myname.split())
# ['김왼손의', '왼손코딩']

fruits_str = '거봉 수박 포도 복숭아'
fruits = fruits_str.split()
print(fruits)
# ['거봉', '수박', '포도', '복숭아']

a = 'a:b:c:d'
b = a.split(':')
print(b)
# ['a', 'b', 'c', 'd']

# Docstring
"""이것도 주석입니다
"""

# count
a = "hobby"
a.count('b') # 2

# index
a = "Life is too short"
a.index('t') # 8

# join
",".join('abcd')
'a,b,c,d'

# upper, lower
a = "HI"
a.lower() # hi
a.upper() # HI

# lstript (왼쪽 공백 지우기)
a = "    ji"
a.lstrip()
"ji"

# rstrip (오른쪽) / strip(양쪽)
a.strip()

# replace
a = "Life is too short"
a.replace("Life", "HI")
print(a) # "HI is too short"
  • 줄바꿈
    • """ 또는 '''로 문자열 줄바꿈이 가능하다.
  • String -> String list
    • list(String 변수)
  • Slicing
    • 문자열 자르기 [시작위치:끝위치]
  • string.split()
    • 문자열 나누기 / String의 메소드
    • string이 짤려서 list로 들어감
    • Default는 공백을 기준으로함
    • 메소드 입력값으로 옵션을 줄 수 있다.
  • DocString
    • """를 이용하면 주석 사용 가능
    • 보통 함수 설명할 때 사용한다.
  • count('b')
    • 문자열 중 b 개수 세기
  • a.index('t')
    • a의 t문자의 인덱스 알려줌
  • join
    • 문자열 사이사이에 삽입
  • replace
    • 문자열 바꾸기

문자열 포매팅

  1. C언어 문법)
    • %d : int
    • %f : double
  2. 포맷 메소드 사용 ('{}' .format() )
    • {}
    • .format()
  • 인덱싱
    • 0부터 시작


List

파이썬의 리스트는 클래스로 구현되어 있으므로 다양한 연산(멤버 함수 또는 메소드)를 지원한다.

[val1, val2, ...]

# List 선언
my_list = []

# List 추가
my_list.append('찹쌀떡')
my_list.append('배고파')
my_list.append('하나')
my_list.append('둘')
my_list.append('셋')
my_list3 = [1, 2, 3]

print(my_list)
print(my_list3)

# List 인덱싱 (주소를 이용해 값을 가져옴)
print(my_list[1])
print(my_list[2:5])

# List 삭제
del my_list[3]
print(my_list)

# List.sort() 정렬
my_list.sort()
my_list.append('하나')
print(my_list)

# List.count() 리스트의 요소의 개수
print(my_list.count('하나'))
print(len(my_list))

추가 삭제

  • append 메소드
    • append('하나') : 추가
  • del 함수
    • del my_list[3] : 인덱스 3의 값을 삭제
  • list[2:5] : 2~5번 인덱스의 값

정렬

  • sort 메소드
    • list.sort()
    • 가나다 순으로 정렬됨

요소의 개수

  • count 메소드
    • list.count('하나') : 하나의 개수
  • len 함수
    • list의 개수를 돌려줌
    • python 내장함수 (python에서 기본적으로 제공)


Tuple

(val1, val2, ...)

List 와 비슷하다. Tuple도 List처럼 여러 값을 모아서 저장한다.

다른 점은 값을 변경할 수 없다는 점이다. (Immutable / List 는 Mutable)


# Tuple
my_tuple = ()
my_tuple = 1, 2, 3
print(my_tuple)


Packing, Unpacking

  • Packing

    • my_tuple = 1, 2, 3
  • Unpacking

    • num1, num2, num3 = my_tuple


Dictionary

in연산자는 리스트, 튜플과 딕셔너리에서 서로 다른 알고리즘을 사용한다.

리스트와 튜플에서는 순차탐색을, 딕셔너리에서는 고급 탐색구조인 해싱을 사용한다.

{Key1:Value1, Key2:Value2 ...}

  • 연관 배열 또는 해쉬가 파이썬에서는 딕셔너리 자료형을 뜻함
  • Key, Value 한쌍으로 이루어짐
    • 따라서 순차적으로 요솟값을 구할 필요 없이 Key를 통해 Value를 얻을 수 있다.
  • Key는 유일하게 사용되어야한다.
    • 중복시 Value를 꺼내올 수 없다.
  • 리스트는 Key로 사용할 수 없다.

>>> a = {1: 'a', 2: 'b'}
>>> a
{1: 'a', 2: 'b'}

# 추가
>>> a[3] = 'c'
>>> a
{1: 'a', 2: 'b', 3: 'c'}
>>> a['name'] = 'pey'
>>> a
{1: 'a', 2: 'b', 3: 'c', 'name': 'pey'}

>>> a[4] = [1,2,3]
>>> a
{1: 'a', 2: 'b', 3: 'c', 'name': 'pey', 4: [1, 2, 3]}

>>> del a[1]
>>> a
{2: 'b', 3: 'c', 'name': 'pey', 4: [1, 2, 3]}
  • 추가 : index 이용
  • 삭제 : del 이용

딕셔너리 함수들 (keys, )

>>> grade['science'] = 45
>>> grade
{'math': 90, 'eng': 100, 'science': 45}

>>> grade.values()
dict_values([90, 100, 45])

>>> grade.keys()
dict_keys(['math', 'eng', 'science'])

>>> grade.items()
dict_items([('math', 90), ('eng', 100), ('science', 45)])

>>> grade.get('math')
90
>>> grade.get('math', 'foo')
90
>>> grade.get('foo')
>>> grade.get('foo', 'foo')
'foo'

>>> grade
{'math': 90, 'eng': 100, 'science': 45}
>>> 'eng' in grade
True
>>> 'none' in grade
False
  • values()
    • value 리스트
  • keys()
    • key 리스트
  • items()
    • key, value 리스트
  • get('key')
    • key로 value 얻기
    • grade.get('math') == grade['math']이다.
      • 하지만 get함수는 존재하지 않는 key로 값을 가져오려고 할 경우에 get함수는 None을 return
      • 후자는 오류를 return해준다.
    • grade.get('math', 'foo')
      • default값을 foo로 설정!
      • math가 없다면 foo를 return, 있다면 value를 return해준다.
  • in
    • 해당 Key 가 딕셔너리 안에 있는지 조사
    • True / False return


집합(Set) 자료형

  • Set의 특징
    1. 중복을 허용하지 않는다.
    2. 순서가 없다.

>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}

# Set -> List
>>> l1 = list(s1)
>>> l1
[1, 2, 3]
  • 순서가 없기 때문에 인덱싱으로 접근하려면 리스트나 튜플로 변환시켜야한다.

교집합, 합집합, 차집합 구하기

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])

>>> s1 & s2
{4, 5, 6}
>>> s1.intersection(s2)
{4, 5, 6}

>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> s1 - s2
{1, 2, 3}
>>> s1.difference(s2)
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
>>> s2.difference(s1)
{8, 9, 7}
  • 교집합
    • & 또는 .intersection
  • 합집합
    • | 또는 .union
  • 차집합
    • - 또는 .difference

Set 관련 함수들

>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}

# add
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}

# update
>>> s1.update([4,5])
>>> s1
{1, 2, 3, 4, 5}

# remove
>>> s1.remove(3)
>>> s1
{1, 2, 4, 5}
  • add
    • 값 추가
  • update
    • 값 한꺼번에 추가
  • remove
    • 값 삭제


Boolean 자료형

>>> if []:
...     print('참')
... else:
...     print('거짓')
...
거짓

# bool
>>> bool('')
False
>>> bool('ad')
True

bool 함수

자료형의 참, 거짓을 반환



변수

변수란 객체를 가리키는 것

a = [1, 2, 3] 일 때

  • [1, 2, 3] 값을 가지는 리스트 객체가 메모리에 생성되고
  • a는 리스트가 저장된 메모리의 주소를 가리키게 된다.

>>> a = [1, 2, 3]
>>> b = a		# 동일한 주소값
>>> c = a[:]	# 다른 주소값
>>> from copy import copy
>>> d = copy(a)

>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]
>>> c
[1, 2, 3]

# id
>>> id(a)
1932009722056
>>> id(b)
1932009722056
>>> id(c)
1932008801736
>>> id(d)
1932009722504
  • id
    • 변수가 가리키는 객체의 주소값을 돌려주는 파이썬 내장 함수이다.
  • 보통 list를 바로 대입시키면 동일한 주소값으로 생성된다.

다른 주소값 가리키게 리스트 복사하기

  • [:]

    • 리스트 전체를 가리키는 [:]을 사용해 복사
  • copy 모듈

    • from copy import copy

두 변수의 값 바꾸기

>>> a = 3
>>> b = 5
>>> print(a, b)
3 5
>>> a, b = b, a
>>> print(a, b)
5 3


제어문

if문

>>> if(money):
...     print(money)
...
True

>>> test = [1, 2, 3]
>>> if 1 in test:
...     pass
... else:
...     print('일이다')
...

>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
...     print('걍')
... elif card:
...     print('cardddd')
... else:
...     print('ggg')
...
cardddd
>>>
  • if 조건문: 후 모든 문장에 들여쓰기 수행
  • 꼭 끝에 : 콜론을 붙여야한다.

while문

>>> prompt = """
... 1. Add
... 2. Del
... 3. List
... 4. Qukt
...
... Enter number: """
>>> number = 0
>>> while number != 4:
...     print(prompt)
...     number = int(input())
...

1. Add
2. Del
3. List
4. Qukt

Enter number:
5

1. Add
2. Del
3. List
4. Qukt

Enter number:
1

1. Add
2. Del
3. List
4. Qukt

Enter number:
4
>>>

# continue
>>> a = 0
>>> while a < 10:
...     a = a + 1
...     if a % 2 == 0: continue
...     print(a)
...
1
3
5
7
9
>>>
  • int(input)이 4일때 종료된다

for문

for 변수 in 리스트(문자열,튜플 등):

​ 문장1

​ 문장2


>>> fruits = ['apple', 'orange', 'kiwi', 'banana']
>>> for i in fruits:
...     print(i)
...
apple
orange
kiwi
banana

>>> a = [(1,2), (3,4), (7,8)]
>>> for (left, right) in a:
...     print(left+right)
...
3
7
15

>>> grades = [90, 25, 67, 45, 80]
>>>
>>> for i in grades:
...     if i > 60:
...             print('합격')
...     else:
...             print('불합격')
...
합격
불합격
합격
불합격
합격

range 함수

range함수는 숫자 리스트자동적으로 만들어준다.

>>> for i in range(2,10):
...     for j in range(1, 10):
...             print(i*j, end=" ")
...     print('')
...
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

>>> for i in range(len(marks)):
...     if marks[i] < 60:
...             continue
...     print("%d번 학생 합격!" % (i+1))
...
1번 학생 합격!
3번 학생 합격!
5번 학생 합격!

리스트 내포

>>> a
[1, 2, 3, 4]
>>> result = [i*2 for i in a if i % 2 == 0]
>>> print(result)
[4, 8]
  • [표현식 for 항목 in 반복가능객체 if 조건문]


함수

def 함수명(parameter):

def는 함수를 만들 때 사용하는 예약어이다.


>>> def add(a, b):
...     return a+b
...
>>> add
<function add at 0x000001C1D4C04AF8>
>>> add(1, 2)
3

# *args 사용
>>> def add_many(*args):
...     result = 0
...     for i in args:
...             result = result + i
...     return result
...
>>> add_many(1, 2, 3, 4, 5)
15
>>> add_many(3, 4, 5)
12

# **kwargs
>>> def print_kwargs(**kwargs):
...     print(kwargs)
...
>>> print_kwargs(a=1)
{'a': 1}

입력값이 몇 개가 올지 모를 때

  • *args 사용

키워드 파라미터

  • **kwargs
  • 매개변수 앞에 **을 붙이면 매개변수는 딕셔너리가 된다!

lambda

간단할 때 사용

>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
profile
https://dsunni.tistory.com/ 이사갑니답

0개의 댓글