본문 바로가기

STUDY

뉴비의 파이썬 배우기 (자료형, 제어문)

이전부터 4차 산업혁명이나 빅데이터 같은 것에 관심은 있었지만 그저 흥미였을 뿐 더 이상 나아갈 생각을 하지 않았었습니다. 단지 교양수업때 배우는 정도로 만족했었죠. 그러나 이번에 IAB융합전공이란 걸 신청하게 되면서 커리큘럼에 따라 파이썬을 배워야 할 수도 있게 되었습니다. 이에 배웠던 내용을 까먹지 않고자 정리해나가려 합니다.

 

프로그램은 리플을 사용합니다.

 


 

문자열 자료형

 

len(a) : a의 길이. 공백 포함 17자.

a[3] : a의 3번째(파이썬은 숫자를 0부터 세기 때문에 3번째는 e, 0번째는 L)

a[-1] : a의 마지막(맨 첫 글자가 0인 만큼 그 앞은 -1, t)

a[0:7] : a의 0번째부터 7번째 앞까지. :는 범위('Life is'가 해당).

더하기로 문자열을 더할 수도 있음.

a[4:] : a 4번째부터 마지막까지. a의 네번째는 공백이므로 ' is too short'가 해당.

 

 

%d - %정수(Integer)

%s - %문자열(String)

 

%% - %(Percentage) 자체

%숫자 - 전체 길이가 숫자만큼임을 의미.

%10s - 오른쪽정렬 + 문자길이 10자(공백 + hi의 길이 = 10)(KERIA는 제외)

%-10S - 왼쪽 정렬 + 문자길이 10자(hi + 공백 = 10)(KERIA는 제외)

%N.nf - 전체 길이가 N + 소수점 n번째 자리까지 표현(여기서 .는 소수점 포인트로, 소수점 뒤에 나올 숫자의 개수 의미)

 

 

format함수를 활용해 이런 식의 입력이 가능하다. 문자열 두 가지만 사용했지만, 숫자나 인덱스 등도 가능하다.

 

{0:<12} - 왼쪽정렬 + 자릿수 12(Hello 포함이므로 띄어쓰기 7칸)(MINSEOK은 포함 X)

{0:>5} - 오른쪽 정렬 + 자릿수 5(띄어쓰기 3칸 + hi)

{0:^20} - 가운데 정렬 + 자릿수 20(hello keria(11자) 포함이므로 5칸 / 4칸 띄어쓰기)

{0:♡^15} - 가운데정렬 + 자릿수 15 + 빈칸 ♡로 채우기

 

 

join - 2020DRX사이에 " ♡ " 를 넣어줌(매 글자마다)

lower, upper - 소문자 / 대문자로 변경

replace(a, b) - a를 b로 변경

split() - ()기준으로 문자열 나누기(아무것도 안 쓴 경우 공백기준이므로 2020DRX가 그대로 프린트됨)

split(' ') - 스페이스바 기준으로 나눔(한 자 한 자 사이에 공백이 있으므로 모두가 개별 문자열이 됨)

 

딕셔너리 자료형

 

맨 처음 딕셔너리 S에는 (key값)Doran, Pyosik, Chovy, Deft, Keria 설정 -> 후에 S['Solka']로 'Solka' : 'Drx' 추가 -> del S['Solka']로 삭제

print(S['Chovy'])는 Chovy(KEY)의 값인 HLE(Value)를 표시.

 

※for은 반복문. 새로운 변수 's'는 S의 key값들을 받아 하나씩 반복. (Doran / Pyosik / Chovy / Deft / Keria 한줄씩 표시)

 

keys - key들만 모아 표시, values - value들만 모아 표시.

리스트가 필요한 경우 list로 변환시켜줄 수 있음.

items - key와 value의 쌍을 튜플로 묶은 값을 dict_items로 표시.

get - key값으로 value를 얻을 수 있게 해 줌.

in - 그 안에 있는지 없는지 확인. 있다면 True, 없다면 False.

 

 

제어문(While)

While : 조건문이 참인 동안은 while문 안의 내용을 반복적으로 수행.

break : 조건 중지 (커피를 10개 이상 주었을 경우 "커피가 다 떨어졌습니다~"라는 문구가 나오며 while문이 깨짐)


 

www.acmicpc.net/problem/2588

 

2588번: 곱셈

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

www.acmicpc.net

세 자리수 곱셈 문제.

a와 b를 입력받아(472, 385)

a값 * b의 일의자리, a값 * b의 십의자리, a값 * b의 백의자리 값, a값 * b값을 표시하면 된다.

 

 

www.acmicpc.net/problem/2884

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

h(시간)와 m(분)을 입력받아 45분 전(알람을 맞출 시각)을 알려주어야 하는 문제.

하루의 시작은 자정(0:00)이고 끝은 다음날 자정 1분 전(23:59).

 

단순히 45분 전이라 하여 m-45와 h-1, m+15만 생각하면 안된다.

0시 30분을 입력시켰을 때 -1시가 되는 기적이 일어나기 때문..^^

 

그래서 h=0인 경우와 그렇지 않은 경우를 나누고,

또 m이 45이상인 경우와 그렇지 않은 경우를 나누어 조건을 작성하면 된다.

 

 

www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

문제 자체를 이해하는 데 시간이 걸렸던 문제.

 

입력받은 N값은 두고 n이라는 함수를 만들어 While문 안에 활용할 예정이다.

n을 십의 자리와 일의 자리로 나누고 (n//10은 10으로 나눈 몫, n%10은 10으로 나눈 나머지) 나눈 값들을 더해준 걸 total 함수로 명명한다.

 

이렇게 나온 total값을 활용하여 new_total 함수를 만드는데, new_total의 값은 n값의 일의 자리에 10을 곱한 것과 total의 일의자리를 더한 값이다.

위의 과정을 반복할 때마다 count에 1이 추가되고, 입력받았던 N값이 new_total의 값과 같아질 때 반복을 중단하고 new_total이 n이 된다.

이후 while이 깨지며 반복 횟수를 표시한다.

 

 


 

여태까지의 진도를 갈무리하여 정리하고 있을 무렵, 합격자들에게 연락이 갔다는 소식을 들었습니다.

융합전공은 결국 떨어진 것 같습니다. 아쉽지만 새로운 학문을 조금이나마 배울 수 있어서 나름 즐거웠고, 여러가지 배운 것 같아 뿌듯하기도 합니다. 소위 '찍먹'해 보았다고 어디 가서 말 할 정도는 되지 않을까요? 아니라면 말구요... ㅎㅎ