• 목록
  • 아래로
  • 위로



안녕하세요?


제가 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. 리스트 표현식과 람다 함수


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


gamb1t님 gamb1t 포함 1명이 추천

추천인 1

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

당분간 일신상의 사정으로 쪽지나 댓글로 답변을 드리기 어렵습니다. 죄송합니다.

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5598
28 [번외편 - 한컴한글] 스마트한 문서 작성을 위한 팁 (작성 중) 이니스프리 이니스프리 20.08.08.13:50 493
27 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 2 image 이니스프리 이니스프리 19.07.16.17:55 2745
26 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 image 이니스프리 이니스프리 18.12.10.19:57 705
25 [번외편 - 아미나] 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 image 이니스프리 이니스프리 18.11.11.22:36 2572
24 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 image 이니스프리 이니스프리 18.12.15.23:02 751
23 [번외편 - 법률] 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 이니스프리 18.12.07.14:16 1313
22 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 image 이니스프리 이니스프리 19.07.17.22:44 447
21 [번외편 - 구글뉴스] 리뉴얼된 구글뉴스에서 RSS 피드를 생성하는 방법 6 image 이니스프리 이니스프리 18.10.07.17:58 3532
20 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 2475
19 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 이니스프리 19.07.04.05:52 4342
18 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4666
17 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1555
16 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6245
15 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 7 image 이니스프리 이니스프리 20.05.14.19:08 1420
14 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23690
13 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 12581
12 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2049
11 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 image 이니스프리 이니스프리 19.08.04.13:40 7801
10 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9249