잘 알지 못했던 것 위주로 정리함!

파이썬에 흥미가지기!

코드

아래 코드를 살펴보자

import webbrowser                                                                             #파이썬 표준 라이브러리인 webbrowser 모듈을 임포트(import).
import json                                                                                   #파이썬 표준 라이브러리인 json 모듈을 임포트.
from urllib.request import urlopen                                                            #표준라이브러리 urllib.request에서 urlopen 함수만 임포트함.
                                                                                              #inport문과의 구분을 위한 빈 줄.
print("Let's find an old website.")                                                           #텍스트 출력.
site = input("Type a website URL: ")                                                          #url을 입력하라는 내용을 출력하고, 사용자에게 URL 입력을 받아서 site라는 변수에 저장. 
era = input("Type a year, month, and day, like 20150613: ")                                   #년,월,일을 입력해라는 내용을 출력하고, 사용자에게 날짜 입력을 받아서 era 변수에 저장함.
url = "http://archive.org/wayback/available?url=%s&timestamp=%s" % (site, era)                #입력한 사이트와 날짜를 토대로 문자열 변수 url을 구성함. 
response = urlopen(url)                                                                       #해당 URL의 웹서버에 연결하여 웹서비스를 요청함.
contents = response.read()                                                                    #응답 데이터를 가져와 contents 변수에 할당함.
text = contents.decode("utf-8")                                                               #내용을 JSON 형식의 텍스트 문자열로 디코딩하여 text 변수에 할당함.
data = json.loads(text)                                                                       #텍스트를 데이터(파이썬 자료구조)로 변환함.
try:                                                                                          #오류를 확인. 오류가 없다면 다음 네줄을 시행하고, 실패하면 코드의 마지막 줄(except 문 다음줄)을 시행함.
    old_site = data["archived_snapshots"]["closest"]["url"]                                   #입력한 사이트와 날짜에 일치하는 항목이 있으면 세 단계의 딕셔너리에서 값을 추출. 다음 try문에 해당하는 코드를 들여쓰기함.
    print("Found this copy: ", old_site)                                                      #찾은 URL을 출력.
    print("It should appear in your browser now.")                                            #URL이 브라우저에 표시될 것음 알림.
    webbrowser.open(old_site)                                                                 #찾은 URL을 웹브라우저에 표시.                                                            
except:                                                                                       #앞의 네 줄 중, 오류가 발생하면 이 줄로 점프. 
    print("Sorry, no luck finding", site)                                                     #사이트 찾기에 실패했다면 텍스트 메시지와 찾으려고 했던 URL을 출력함. 앞의 try문에서 예외가 발생할 때 except 문을 실행하므로 들여쓰기함.

이 코드는 웨이백 머신(https://.archive.org)의 인터넷 아카이브를 사용한다.

여기서 잠깐. 아카이브란?
소장품이나 자료 등을 디지털화하여 한데 모아서 관리할 뿐만 아니라 그것들을 손쉽게 검색할 수 있도록 모아 둔 파일. 정보통신 분야에서 백업용 또는 다른 목적으로 '한 곳에 파일들을 모아둔 것'을 아카이브라고 부른다. 간단히 말해 기록 보관소!

다시 코드로 돌아가보자. 위 코드는 URL과 날짜를 입력하면 웨이백 머신에 해당 날짜의 웹사이트 복사본이 있는지를 묻는다. 복사본을 찾으면 프로그램에 해당 정보를 반환한다. 그리고 URL을 출력하고 이를 웹 브라이저에 표시한다.

한마디로 이 과정은 데이터를 입력 받아서 인터넷을 통해 웹사이트와 통신하여, 일부 내용을 가져와서 URL을 추출하고 웹 브라우저가 해당 URL을 표시하도록 명령한다.

결과


위 사진처럼 URL 입력란에 lolcats.com을 입력하고 날짜 입력란에 20151022를 입력하자. 그러면 아래 사진과 같은 웹페이지가 나타나고 그 아래 사진과 같이 최종 결과값을 반환한다.

파이썬 스크립트 실행 모드

파이썬 에디터에서 다음과 같은 코드를 작성해보자

# file: cal.py
import calendar
print(calendar(2022,2))

실행하면 다음과 같은 결과가 나온다.

나는 파이참 터미널에서 바로 코드를 작성하여 실행했다.
이 코드를 저장하려면 파이참에서 New - Python file를 클릭하여 코드를 작성 후 저장하면 된다.
파일명은 cal.py로 저장하였다.
해당 코드를 run하면 위 사진처럼 결과가 잘 나온다.

복소수

  • 실수부 + 허수부로 구성
  • 허수부는 j or J로 표기

코드
type(3-4j)
(3-4j).real
(3-4j).imag
(3-4j).conjugate()

결과

변수의 다양한 할당 방법

여러개를 한꺼번에 치환

코드
e,f = 3.5, 5.3

결과

값 교환

코드

e,f = 3.5, 5.3
e,f = f,e
print(e,f)

결과

예약어 확인하기

변수에 예약어는 쓸 수 없다.
그렇다면 예약어는 어떻게 확인할까?

코드

import keyword
keyword.kwlist

결과

진수

  • 2진수(binary): 0b 혹은 0B
  • 8진수(Octal): 0o 혹은 0O
  • 16진수(Hex): 0x 혹은 0X

출력해보기!

10진수에서 다른 진수로의 변환

bin(변수)를 실행하면 변수 안에 있는 숫자 값을 이진수로 변환해준다.
마찬가지로 oct(변수), hex(변수)를 쓸 수 있다.

타입 변환

True와 False만 있는 불리언타입은 정수로 변환하면 각각 1,0을 반환한다.
반대로 bool()함수를 사용하면 정수에 해당하는 불리언 값을 반환한다.

위 사진에서 float()str()변환을 실험한 결과도 있으니 확인하길 바란다.

다음 기타 부동소수점 숫자를 불리언 값으로, 숫자 구분 기호(_), 텍스트 문자열을 정수로 변환해본다.

마지막으로 타입 변환 후 해당 변수의 타입 유형을 확인해보자.

위 사진을 통해 문자열을 넣은 변수는 타입 변환을 하더라도 그 변수 자체의 성질은 그래도 문자열을 유지하고 있음을 확인할 수 있다.

라인 유지하기

코드가 짧으면 프로그램을 더 쉽게 읽을 수 있기 때문에 가능한 한 한 번에 해석할 수 있도록 코드를 한 줄 안에 넣기를 권장한다.

코드가 길어질 때 한 줄을 유지하기 위해서는 백슬래쉬(\)문자를 입력하면 된다. 그러면 줄이 다음 줄로 넘어간다 하더라도 한 줄로 인식한다.

아래의 예시를 통해 확인해보자.

여러 개 비교하기: in

어떤 문자가 모음(vowel)인지 확인하려면 어떻게 해야 할까?

  1. if문 사용

위와 같이 한 변수에 여러 값을 비교할 때 파이썬 멤버십 연산자``in을 사용할 수 있다. 모음 문자로 구성된 문자열을 사용해 다음과 같이 간단히 확인할 수 있다.

  1. in 사용

vowels란 변수에 문자를 넣고 letter 안에 있는 변수가 vowels란 변수에 있는 값이 있는게 맞는지 아닌지 True or False를 판단한 다음 if문을 활용해 print 한다.

바다코끼리 연산자

바다코끼리 연산자는 Python 3.8의 새로운 기능이다.
형식은 다음과 같다.

이름 := 표현식

:= 이 모양이 마치 바다코끼리 같다고 하여 이러한 이름이 붙여졌다고 한다.

테스트 코드

위 코드를 바다 코끼리 연산자로 변경하면 다음과 같다.

시퀀스 모델

시퀀스(sequence): 데이터에 순서(번호)를 붙여 나열한 것. 특정 위치의 데이터를 가리킬 수 있다.
연오의 파이썬이라는 사이트에 해당 시퀀스 모델에 대해 굉장히 잘 설명해놓아서 링크를 걸어놓았다.

비트 연산자

연산자기능문법설명
<<비트 왼쪽 시프트a<<ba의 비트를 b번 왼쪽으로 이동
>>비트를 오른쪽 시프트a>>ba의 비트를 b번 오른쪽으로 이동
&비트 ANDa&ba와 b의 비트를 AND 연산
|비트 ORa | ba와 b의 비트를 OR 연산
^비트 XORa^ba와 b의 비트를 XOR(배타적 OR) 연산
~비트 NOT~xx의 비트를 뒤집음(ㅇ<->1)

여러 줄의 문자열 정의

""" 혹은 ""을 이용하여 여러 줄의 문자열을 정의할 수 있다.

문자열의 연산 : 연결(+)과 반복(*)

  1. 문자의 연결
    응용하기
    위 사진에서
print(full_name[2:6])
ung 
print(full_name[2:5])
ung

을 보면 어라? [2:6][2:5]는 다른데 왜 print된 값은 똑같지? 라고 생각할 수 있다. 이유는 5번째에 공백, 즉 null 값이 들어있기 때문! 한마디로 우리가 보기에는 똑같이 표현되어 있다고 생각할 수 있지만

print(full_name[2:6])
ung 

에서 결과값은 정확하게는 [u,n,g,null]이 표현된 것이다.

  1. 문자의 반복

  2. 주의하기
    문자열 객체와 수치형 객체는 +연산을 할 수 없다.
    "Python"+3을 입력하면 error 코드가 뜨는 걸 확인할 수 있다.

>>> "Python"+3

Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

문자열 메서드

대소문자 관련

메서드설명
upper()문자열을 대문자로 변환
lower()문자열을 소문자로 변환
swapcase()대<->소문자를 전환
capitalize()문자열의 첫 글자를 대문자로 변환
title()문자열의 각 단어의 첫글자를 대문자로 변환. 나머지는 소문자로 변환

아래는 대소문자 변환 관련 예제이다.

검색 관련

메서드설명
count()문자열 내 검색어 개수를 반환
find()문자열 내 첫번째검색된 위치의 인덱스를 반환
index()문자열 내 검색된 위치의 인덱스를 반환
rindex()문자열 내 오른쪽으로부터 검색된 위치의 인덱스를 반환
startswitch()문자열이 지정된 검색어로 시작하는지 여부 반환
endswitch()문자열이 지정된 검색어로 끝나는지 여부 반환

아래는 검색 관련 예시이다.

중간에 error문구는 잘못 적어서 나타난 것.

편집, 치환 관련

메서드설명
strip()문자열 내 좌우 공백문자를 삭제. 좌우 삭제할 문자열을 지정 가능
lstrip()문자열 내 왼쪽의 공백문자를 제거
rstrip()문자열 내 오른쪽 공백문자를 제거
replace()문자열 내 지정된 검색어를 다른 문자열로 치환

아래는 편집, 치환 관련 예시이다.

정렬 관련

메서드설명
center()문자열을 가운데로 정렬
ljust()문자열을 왼쪽으로 정렬
rjust()문자열을 오른쪽으로 정렬
zfill()자리수를 지정하고 빈 공간을 0로 채움

아래를 정렬 관련 예시이다.

분리, 결합 관련

메서드설명
split()문자열을 공백문자(혹은 지정된 문자)를 기준으로 분리
rsplit()문자열을 공백문자(혹은 지정된 문자)를 기준으로 오른쪽부터 분리
join()문자열을 지정된 기호로 합침
splitlines()문자열을 개행문자를 기준으로 분리

아래는 분리, 결합 관련 예시이다.

판별 관련

메서드설명
isdigit()문자열이 숫자로 구성되어 있는가 여부를 반환
isalpha()문자열이 알파벳으로 구성되어 있는가 여부를 반환
islower()문자열이 소문자로 구성되어 있는가 여부를 반환
isupper()문자열이 대문자로 구성되어 있는가 여부를 반환
isspace()문자열이 공백문자로 구성되어 있는가 여부를 반환

아래는 판별 관련 예시이다.

서식 메서드 - 문자열 포맷 코드

코드설명
%s문자열(string)
%c문자 1개(character)
%d정수(integer)
%f부동 소수(floating point)
%o8진수
%x16진수
%%Literal%

아래는 문자열 포맷 코드를 활용한 예시이다.
위 사진에서 코드"interest rate is %2.4f" % 1.24에서 %2.4f가 뜻하는 것은 정수부 2자리, 소수부 4자리를 나타내라는 것이다.

고급 문자열 포매팅 - .format() 메서드

예시를 확인하여 바로 학습해보자.
format_map메서드를 사용하면 이름 기반으로 map의 데이터 형식을 이용해 포맷을 지정할 수 있다.

최신 스타일: f-문자열

f-문자열은 파이썬 3.6에서 등장한 최신 ㅡ타일.

  • 첫 인용 부호 앞에 문자 f 또는 F를 입력.
  • 변수 이름이나 식을 중괄호 안에 포함해 값을 문자열로 가져옴.

예시

>>> thing = 'wereduck'
>>> place = 'werepond'
>>> f'The {thing} is in the {place}'
'The wereduck is in the werepond'
>>> f'the {thing.capitalize()} is in the {place.rjust(20)}'
'the Wereduck is in the             werepond'
>>> f'The {thing:>20} is in the {place:.^20}'
'The             wereduck is in the ......werepond......'
>>> f'{thing =}, {place =}'
"thing ='wereduck', place ='werepond'"

슬라이스로 부분 문자열 추출하기

  • 슬라이스(slice)란?
    무엇인가의 일부를 잘라낸다는 뜻. 문자열의 일부를 추출하는 데 사용한다.
메서드설명
[:]처음부터 끝까지 전체 시퀀스를 추출한다.
[ start : ]start 오프셋부터 끝까지 시퀀스를 추출한다.
[ : end ]처음부터 (end -1)오프셋까지 시퀀스를 추출한다.
[ start : end ]start 오프셋부터 (end -1) 오프셋까지 시퀀스를 추출한다.
[ start : end : step ]step만큼 문자를 건너뛰면서, start 오프셋부터 (end -1) 오프셋까지 시퀀스를 추출한다.

문자열의 오프셋은 다음 사진을 참고하자.

아래 사진에서 흰색 영역이 추출하는 값을 의미한다.

이제 슬라이스의 여러 예시를 활용해보자.

슬라이스 백스텝의 예시

  • 파이썬 스크립트 모드는 파이참에서 터미널을 사용하거나 파이썬 콘솔을 사용하면 된다.

    위 사진처럼 파이참 하단에 있으니 체크!

  • 실무에서 파이썬으로 코딩할 때 헷갈리는 게 있으면 아래와 같이 구글링 해보자

    python cheat sheet

치트 시트를 참고하여 지금 내게 어떤 함수, 변수 등등이 필요한지 참고하여 활용할 수 있다.
아래 링크도 참고하자.
생활코딩 치트시트

참고도서

<처음 시작하는 파이썬(2판)>바로가기
<Python 기본 프로그래밍>,비트교육센터

profile
개발자로 시작| 공부한 것을 기록합니다.

0개의 댓글