• 목록
  • 아래로
  • 위로



안녕하세요?


제가 COS Pro 시험에 응시한지 벌써 3주가 지났는데요.


더 시간이 경과되어 기억이 사라지기 전에 시험에 출제된 파이썬 문법과 관련된 팁을 남기려고 합니다.


이는 본 강좌의 이론편에서 실습편으로 넘어가기 전에 이론을 최종적으로 정리하는 의미도 지닙니다.



저작권법에 저촉될 여지가 있어서 출제된 문제 자체에 대하여 직접적인 언급을 할 수 없지만, 이전의 강좌에서 다뤄지지 않았지만 출제된 문제를 해결하는 데 있어 필요한 문법적 지식에 대해 설명을 드리고자 합니다.


COS Pro는 문제은행 방식으로 출제되기 때문에 유사한 문제가 다시 출제될 가능성이 높다고 생각합니다.


참고로 이 글에 서술된 7개의 항목 중에서 저는 시험장에서 4개를 사용하였고, 그 중 적어도 3개는 명시적으로 이를 활용하여 문제를 해결하는 방향으로 출제된 것으로 생각됩니다.




1. 문자열의 대소비교


프로그래밍을 하다보면 문자열에서 글자 하나씩 대소를 비교해야 할 경우가 있습니다.

(예컨대 A < B, x < y 이런 방식으로 비교하는 것을 설명드리는 것입니다.)


예컨대 A~F 학점 데이터가 주어졌을 때 B 학점 이상이면 장학금을 지급하는 경우를 처리할 때 편리하겠죠 ^^


문자열의 대소비교에서 ord() 함수를 이용하여 글자를 아스키코드로 변경한 후 이를 비교하는 방법은 아마도 모든 프로그래밍 언어에서 허용될 것입니다.


그런데 파이썬에서는 아스키코드로 변경하지 않고서도 비교연산자를 사용하여 글자 간의 대소를 직접적으로 비교하는 것을 허용하고 있습니다.

(물론 대소를 비교하는 방법은 아스키코드로 변경을 한 것과 동일합니다.)


다음은 각 과목의 점수가 리스트로 주어진 경우에 B 학점 이상인 과목의 수를 출력하는 스크립트입니다.


score = ['A', 'A', 'D', 'B', 'B', 'C', 'A']
temp = ''
for s in score:
   if s <= 'B':
       temp += s
print(len(temp))

=> 5


이 때 주의해야 할 점은 알파벳 대문자는 아스키코드 65부터 시작하고, 소문자는 97부터 시작하기 때문에, 후자가 더 크다는 것입니다.




2. Set 자료형


Set(집합) 자료형은 파이썬 2.3부터 지원하기 시작했는데, 굉장히 강력한 자료형임에도 이용빈도가 낮은 것 같습니다.


Set 자료형은 (1) 중복을 허용하지 않고, (2) 순서가 없어서(unordered) 인덱싱으로 접근할 수 없다는 특징을 가집니다.


Set 자료형은 강점은 수학에서의 집합과 관련된 다양한 연산을 바로 적용할 수 있다는 점입니다.


예컨대 제주도 연돈에 방문하여 '대기한 날짜'과 '실제로 먹은 날짜'가 리스트로 주어진 경우, 대기했지만 결국 먹지 못한 날을 구하려고 할 때 set을 활용하여 간단하게 '차집합' 계산을 할 수 있습니다.


went = set([1, 10, 17, 25])
ate = set([10, 25])
fail = went - ate
print(fail)

=> {1, 17}


리스트에서는 뺄셈 연산이 되지 않는다는 점과 큰 차이가 있습니다!


만약 리스트만을 사용해야 한다면 이중 for 문을 돌려야 하는데, 이는 상당히 번거로운 작업이 아닐 수 없습니다.


참고로 '교집합'은 s1 & s2 또는 s1.intersection(s2) 이런 방식으로 구할 수 있습니다.



한편 Set 자료형은 리스트 내에 중복된 원소가 있는 경우에, 중복을 배제하고 어떤 항목이 있는지 파악해야할 경우에도 유용합니다.


a = [1, 2, 2, 3, 3, 3]
print(set(a))

=> {1, 2, 3}


참고로 이는 문자열에서 글자의 중복을 배제해야 하는 경우에도 적용 가능합니다.




3. 3항연산자


파이썬의 3항연산자는 C, Java 등과 상이한 점이 있어서 혼동하기 쉽습니다.


다른 언어에서의 ’?’가 ‘and’에 해당하고, ’:‘가 ‘or’에 해당한다고 이해하시면 됩니다.


a = 100
b = 500
result = a == b and a-b or a+b 

=> 600


한편 파이썬 2.5 이상에서는 if, else를 활용하여 보다 간명한 3항연산자의 사용이 가능합니다.


a = 100
b = 500
result = (a-b) if a == b else (a+b)

=> 600


3항연산자는 변수에 대입할 때에도 사용할 수 있고, 함수의 return 처리부분에도 활용할 수 있습니다.




4. 한 줄 if 문


Java, PHP 등 타 언어 커뮤니티에 들어가보면 파이썬의 조건문 및 반복문에서의 들여쓰기 문법에 이질감을 느끼시는 분들이 많이 계신 것 같습니다.


사실 파이썬에서 모든 경우에 들여쓰기가 강요되는 것은 아닙니다.


들여쓰기를 요하는 여러 줄의 if 문을 단 한 줄의 if 문으로 표현하여 들여쓰기를 하지 않을 수 있습니다 ^^


위의 6줄 짜리 if~elif~else 문을 아래의 한 줄로 표현할 수 있습니다.


# 통상의 if 문
a = 10

if a > 10:
   b = 999
elif a == 7:
   b = 99
else:
   b = 9

# 한 줄 if 문
b = 999 if a > 10 else (b == 99 if a == 7 else 9)




5. 인덱스 슬라이싱에서 3번째 인자의 활용


리스트를 비롯한 iterable한 변수의 인덱스에서 [start:end:step] 형식으로 인덱스 슬라이딩을 할 때 3번째 인자를 잘 활용하면 유용합니다.


예컨대 스포어 자유게시판을 작성시간상 과거인 25번째 페이지부터 현재인 첫번째 페이지까지 순서대로 크롤링한다면 다음과 같이 구현할 수 있습니다.


import requests

# (중간 생략)
url = 'https://studyforus.com/index.php?mid=freeboard&page='
for i in range(25, 1, -1):
    s.get(url + str(i))



이전 강좌에서도 간략하게 다뤘지만, 문자열의 경우에는 .reverse() 메서드를 지원하지 않는데, 이러한 문자열을 뒤집는 데에도 3번째 인자를 사용할 수 있습니다.


s = 'studyforus'
print(s[::-1])

=> surofyduts




6, 7. 리스트 표현식과 람다 함수


(이는 리스트 및 함수와 관련된 별도의 챕터에서 다룰 예정입니다.)


포함 1명이 추천

추천인 1

작성자
이니스프리 119 Lv. (2%) 4193680/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 3103
28 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 13013
27 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23920
26 0. 행의 분리 및 결합 / 멀티라인 문자열 image 이니스프리 이니스프리 21.04.18.11:53 629
25 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1852
24 [번외편 - 한컴한글] 스마트한 문서 작성을 위한 팁 (작성 중) 이니스프리 이니스프리 20.08.08.13:50 593
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 8 image 이니스프리 이니스프리 20.05.14.19:08 1684
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 5754
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 3 image 이니스프리 이니스프리 20.02.01.23:46 1516
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9466
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2379
18 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6605
9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1158
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5984
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 760
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2228
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1370
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4926
11 1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2663
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 669