Python 기본 문법

shin·2022년 6월 23일

Python

목록 보기
2/4
post-thumbnail

[ python 관련 문서 검색 방법 ]


1. 문자열

1) for i, list in enumerate(lists)

days = [31,29,31,30,31,30,31,31,30,31,30,31]

for i, day in enumerate(days):
    print('{}월의 날짜수는 {}일 입니다.'.format(i + 1, day))
1월의 날짜수는 31일 입니다.
2월의 날짜수는 29일 입니다.
3월의 날짜수는 31일 입니다.
4월의 날짜수는 30일 입니다.
5월의 날짜수는 31일 입니다.
6월의 날짜수는 30일 입니다.
7월의 날짜수는 31일 입니다.
8월의 날짜수는 31일 입니다.
9월의 날짜수는 30일 입니다.
10월의 날짜수는 31일 입니다.
11월의 날짜수는 30일 입니다.
12월의 날짜수는 31일 입니다.

2) 리스트와 문자열

# join : list -> string
time_string = ":".join(['10', '12', '14'])
print(time_string)

# split : string -> list
time_list = time_string.split(":")
print(time_list)
10:12:14
['10', '12', '14']

2. 모듈

1) import math

import math

math.ceil(2.5) # 올림 = 3
math.floor(2.5) # 내림 = 2

2) import random

import random

list = ["빨","주","노","초","파","남","보"]
random_element = random.choice(list)
print(random_element) # list 요소 중에 하나를 랜덤으로 출력

random.shuffle(list)
print(list) # list의 순서를 섞음

random_number = random.randint(2, 5)
print(random_number) # 2보다 크거나 같고, 5보다 작거나 같은 임의의 정수 출력
남
['빨', '파', '초', '보', '주', '노', '남']
5

3) import urllib.request

url을 넣으면 페이지 내용을 돌려주는 함수

def get_web(url):
    import urllib.request
    response = urllib.request.urlopen(url)
    data = response.read()
    decoded = data.decode('utf-8')
    return decoded

url = input("web page url > ")
content = get_web(url)
print(content)
web page url > http://example.com
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ... 생략 ...
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

4) datetime

import datetime

now = datetime.datetime.now()
day = datetime.date.today()

print("오늘은 {}년 {}월 {}일, {}시 {}분 {}초({})입니다.".format(
    now.year, now.month, now.day, now.hour, now.minute, now.second, now.microsecond))
print("오늘 날짜 :", day)
오늘은 2022년 6월 23일, 18시 33분 11초(658569)입니다.
오늘 날짜 : 2022-06-23
import datetime

end_time = datetime.datetime(2022, 6, 27)

how_long = end_time - datetime.datetime.now();

print("6월 27일까지는 {}일 {}시간이 남았습니다.".format(how_long.days, how_long.seconds//3600))
6월 27일까지는 2일 23시간이 남았습니다.

timedelta : 시간 연산을 가능하게 해주는 클래스

>>> import datetime

>>> hundred = datetime.timedelta(days = 100)
>>> datetime.datetime.now() + hundred # 100일 이후의 날짜
datetime.datetime(2022, 10, 2, 1, 20, 34, 790382)

>>> datetime.datetime.now() - hundred # 100일 이전의 날짜
datetime.datetime(2022, 3, 16, 1, 21, 25, 390266)

# 오늘 3시부터 하루 뒤 날짜
>>> tomorrow = datetime.datetime.now().replace(hour = 3, minute = 0, second = 0) 
	+ datetime.timedelta(days=1)
>>> tomorrow
datetime.datetime(2022, 6, 25, 3, 0, 0, 832469)

3. List

1) slice

>>> list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> list[0:10:2]
[1, 3, 5, 7, 9] # 홀수만 출력
>>> list[10:0:-2]
[10, 8, 6, 4, 2] # 짝수만 역순으로 출력

>>> list2  = list[0:10:2] # 홀수만 다른 리스트로 생성
>>> list2
[1, 3, 5, 7, 9]

>>> del list2[1:] # 인덱스 1부터 끝까지 삭제
>>> list2
[1]

# 홀수 값들을 짝수 값들로 변경
>>> list[0:10:2] = [2, 4, 6, 8, 10]
>>> list
[2, 2, 4, 4, 6, 6, 8, 8, 10, 10]

# 인덱스 0부터 1까지의 값들을 1로 변경하고, 나머지 1은 바로 뒤에 삽입
>>> list[0:2] = [1, 1, 1]
>>> list
[1, 1, 1, 4, 4, 6, 6, 8, 8, 10, 10]

4. Dictionary

wintable = {
    '가위' : '보',
    '바위' : '가위',
    '보' : '바위'
}

def rsp(mine, yours):
    if mine == yours:
        return 'draw'
    elif wintable[mine] == yours:
        return 'win'
    else:
        return 'lose'

result = rsp('가위', '바위')

messages = {
    'win' : '승리했다',
    'draw' : '비겼다',
    'lose' : '패배했다'
}

print("가위바위보 결과 {}.".format(messages[result]))
가위바위보 결과 패배했다.

#         ↓ 이름표는 문자열 또는 숫자를 주로 사용하지만
dict = { "이름표" : [1,2,3] }
#                   ↑ 값은 리스트를 포함해서 무엇이든 올 수 있음

print( dict["이름표"] )
[1, 2, 3]

dict = {'one' : 1, 'two' : 2, 'three' : 3, 'four' : 4}

# 순서와 상관없이 for문이 실행됨
for key, value in dict.items():
    print("{}은 {}입니다.".format(key, value)) 
one은 1입니다.
two은 2입니다.
three은 3입니다.
four은 4입니다.

dict1 = {1 : 100, 2 : 2000}
dict2 = {1 : 1000, 3 : 3000}

dict1.update(dict2)
print(dict1)
{1: 1000, 2: 2000, 3: 3000}

List vs Dictionary


5. tuple

packing & unpacking

두 변수간의 값 변경을 쉽게 할 수 있음

>>> x = 5
>>> y = 10
>>> x, y = y, x
>>> x
10
>>> y
5

튜플을 이용한 함수의 리턴값

list = [1, 2, 3, 4, 5]
for a in enumerate(list):
    print('{}번째 값 : {}'.format(*a))
    
dict = {'one' : 1, 'two' : 2, 'three' : 3}
for a in dict.items():
    print('{}은 {}입니다.'.format(*a))
0번째 값 : 1
1번째 값 : 2
2번째 값 : 3
3번째 값 : 4
4번째 값 : 5
one은 1입니다.
two은 2입니다.
three은 3입니다.

6. while문

selected = None
while selected not in ['가위', '바위', '보']:
    selected = input('가위, 바위, 보 중에 선택하세요 > ')
print('선택된 값은 :', selected)
가위, 바위, 보 중에 선택하세요 > 주먹
가위, 바위, 보 중에 선택하세요 > 보자기
가위, 바위, 보 중에 선택하세요 > 바위
선택된 값은 : 바위

7. try-except

b = int(input())
try:
    result = 10 / b
    print("나눗셈 결과는 {}입니다.".format(result))
except Exception as ex:
    print("{} 에러 발생 : 0으로 나눌 수 없습니다.".format(ex))
10
나눗셈 결과는 1.0입니다.

0
division by zero 에러 발생 : 0으로 나눌 수 없습니다.

8. bool 값과 논리 연산

>>> bool(0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool([])
False

value = input("값을 입력하시오 > ") or "입력 받은 값이 없습니다."
print("output = ", value)
값을 입력하시오 >
output =  입력 받은 값이 없습니다.

값을 입력하시오 > hi
output =  hi

9. instance

list1 = list("hello")
list2 = list("hello")

isinstance(list1, list)      #True
isinstance(list2, list)      #True

print(list1 == list2)        #True     list1과 list2는 같은 값
print(list1 is list2)        #False    list1과 list2는 다른 인스턴스

10. Class

1) method

class Human( ):
    # constructor
    def __init__( self, name, weight ):
        self.name = name
        self.weight = weight
    
    # toString
    def __str__( self ):
        return "{} ( 몸무게 {}kg )".format( self.name, self.weight )

    def eat(self):
        self.weight += 0.1
        print("{}가 먹어서 {}kg이 되었습니다.".format(self.name, self.weight))
    
    def walk(self):
        self.weight -= 0.1
        print("{}가 걸어서 {}kg이 되었습니다.".format(self.name, self.weight))
      
person = Human( "영희", 55.5 )
person.walk()
person.eat()
person.walk()
print(person)
영희가 걸어서 55.4kg이 되었습니다.
영희가 먹어서 55.5kg이 되었습니다.
영희가 걸어서 55.4kg이 되었습니다.
영희 ( 몸무게 55.4kg )

2) 상속 & Override & super()

class Animal( ): # 부모 클래스
    def __init__(self, name):
        self.name = name
        
    def walk(self):
        print("{}가 걷는다.".format(self.name))
        
    def greet(self):
        print("{}가 인사한다.".format(self.name))

class Dog(Animal): # 자식 클래스
    def __init__(self, name, hand): # Override
        super().__init__(name) # super() : 부모 클래스 내용 사용
        self.hand = hand

    def wave(self): 
        print("{}를 흔들면서".format(self.hand))
        
    def greet(self): # Override
        self.wave()
        super().greet() # super()
         
dog = Dog('강아지', '꼬리')
dog.walk()
dog.greet()
강아지가 걷는다.
꼬리를 흔들면서
강아지가 인사한다.

3) 사용자 예외 정의

class BadUserName(Exception):             # 이름에 대한 예외처리
class PasswordNotMatched(Exception):      # 패스워드에 대한 예외처리

try:
    sign_up( )
except BadUserName:
    print( "이름으로 사용할 수 없는 입력" )
except PasswordNotMatched:
    print( "입력한 패스워드 불일치")
  • 예외를 BadUserName, PasswordNotMatched으로 정의해서 각각 처리하면,
    오류 처리를 쉽게 할 수 있고 코드의 직관성을 높여줌

11. List comprehension

areas2 = [ i * i for i in range(1, 11) if i % 2 == 0]
print("areas2 : ", areas2)

matrix = [ ( x, y ) for x in range(2) for y in range(2) ]
print("matrix : ", matrix)
areas2 :  [4, 16, 36, 64, 100]
matrix :  [(0, 0), (0, 1), (1, 0), (1, 1)]

12. Dictionary comprehension

weathers = ['rain', 'sun', 'cloud']
weather_dict = { "{}번".format(number + 1): name for number, name in enumerate(weathers)}
print(weather_dict)

percents = [100, 90, 78]
percents_dict = {weather : percent for weather, percent in zip(weathers, percents)}
print(percents_dict)
{'1번': 'rain', '2번': 'sun', '3번': 'cloud'}
{'rain': 100, 'sun': 90, 'cloud': 78}

출처 : 파이썬 입문 - 프로그래머스

profile
Backend development

0개의 댓글