Forensic/혼공파 챌린지

혼공파 2주차 미션

Ron Weasley 2021. 7. 17. 16:30

안녕하세요. 이번주는 혼공파 2주차 미션을 포스팅 해보려고 합니다. 1주차때는 선택미션을 하지 않았지만 이번주부터는 선택미션도 하도록 하겠습니다. ㅎㅎㅎ

 

2주차 과제는 표와 같은데요 한번 시작해볼께여!!

2주차 과제

일단 먼저 P137에 가기 앞서 Chapter2-3 ~ 2-4부터 배워본 내용을 정리해봅시다.

 

변수란?

  값을 저장할 때 사용하는 식별자. 즉, 10이라는 데이터를 저장하기 위해서 필요한 메모리 공간이라고 생각하면 됩니다. 쉽게 말하자면 인터넷에서 혼.공.파 도서를 하나 구입하면 집에 택배로 배달올 때 박스에 담겨져옵니다. 이때, 혼공파 도서가 데이터가되고 박스가 변수가 되는것입니다. 예를 들어볼게요

이 소스코드는 a라는 변수에 10이라는 데이터를 저장하고, b변수에 20이라는 데이터를 저장해줌으로써, a+b를 출력해주는 소스코드입니다. 쉽게 말해서 변수 a,b를 선언하고 값을 할당해줌으로써 변수에 저장된 값으로 연산까지 한 것입니다.

 

여기서 조심해야 할 것이 있습니다. 파이썬은 다른 프로그래밍 언어인 자바, C, C++과는 다른것이 원래 변수를 선언할 때 앞에 자료형이 붙어야합니다. int a, double pi, char str .... 이런식으로 자료형인 int, double, char가 변수를 선언할 때 같이 붙어있지만 파이썬의 경우 자료형을 지정해주지 않아서 a b c 이런식으로 변수가 지정이 됩니다. 하지만 이러한 기능이 유용성을 보여주는 예시 이기도 하지만, 한편으로는 자료형을 기억하지 못해 에러를 발생할 경우가 생기니 조심하도록 합시다.

 

복합 대입 연산자

  복합 대입 연산자를 알기전에 대입 연산자(=)부터 설명하겠습니다. 대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연선자이며, 피연산자들의 결합 방향은 ← 이 방향인 오른쪽에서 왼쪽으로 이루어집니다. 그럼 복합 대입 연산자는 말 그대로 복합(합쳐진)대입 연산자라는 것 입니다. 1주차에서 배웠던 사칙연산 +, -, *, / 과 대입연산자 = 을 합친것입니다.

연산자 이름 설명
+= 숫자 덧셈 후 대입 ex) a += 20
-= 숫자 뺄셈 후 대입 ex) a -= 10
*= 숫자 곱셈 후 대입 ex) a *= 2
/= 숫자 나눗셈 후 대입 ex) a /= 4
%= 숫자 나머지를 구한 후 대입 ex) a %= 3
**= 숫자 제곱 후 대입 ex) a **= 2

이런식으로 기본 연산자와 대입 연산자를 함께 사용한것 입니다. a += 20은 a = a + 20이랑 같은 식을 나타내며, 숫자뿐 아니라 문자열에도 같은 복합 연산자를 사용할 수 있지만 문자열에서는 +=와 *=만 적용됩니다. 예시로 소스코드를 보여드리겠습니다.

input() 함수

이때까지는 print함수로 출력만 해보았는데 이제는 키보드로 직접 입력을 할 수 있는 함수인 input()함수를 배워보도록 하겠습니다. input()함수는 프로그램을 사용하는 사용자로부터 데이터를 입력받기 위해 사용되는 함수입니다. input 함수 괄호 안에 입력한 내용을 "프롬프트 문자열"이라고 합니다. 바로 예를 보겠습니다.

소스코드의 1행을 실행하게 되면 num이라는 변수에 값을 할당하기 전 문자열이 출력되고 커서가 있는 부분에서 대기상태가 됩니다. 프로그램이 실행 중 잠시 멈춰있는 것을 블록이라고 합니다. 블록상태가 되면 키보드로 자료를 입력할 수 있습니다. 그리고 num이라는 변수에 값을 할당하고 값을 출력하기 위에 print(num)이라고 2행에 적어놨습니다. 3행은 우리가 입력한 값이 어떠한 자료형을 띄고있는지 알아보는 type() 함수 입니다.

대기상태에서 123을 입력하면 변수 num에 123이라는 데이터값이 저장하게 되고 데이터값을 출력한것입니다. 하나만 더 알아봅시다. input() 함수를 통해서 자료를 입력하게 되면 문자을 입력하면 문자열 자료형이 되고, 숫자를 입력하면 정수형 자료형이 될거라고 생각하시는분들이 간혹 있을 수 있는데 input() 함수를 통해서 입력을 할 때 무엇을 입력하든지 무조건 문자열 자료형입니다. 위의 예제로 자료형 타입을 알아봅시다.

 

그러면 키보드로 직접 입력한 값은 무조건 문자열이면 정수형을 사용할 수 없나??? 라고 생각이 들 수 있는데 이제는 문자열 자료형을 정수형 or 실수형으로 변환을 시켜주는 함수인 int(), float()함수를 배워보도록 하겠습니다. 이렇게 형변환을 시켜주는것을 "캐스팅"이라고 자주 언급이 되는데 기억해주시길 바랍니다.

코드 해석을 해보겠습니다.

① num_int라는 변수에 int형으로 캐스팅해준 입력을 받습니다. 그리고 2행에서 입력한 값을 출력하고 3행에서 입력한 값의 자료형을 출력합니다.

 

② num_float라는 변수에 float형으로 캐스팅해준 입력을 받습니다. 그리고 6행에서 입력한 값을 출력하고 7행에서 입력한 값의 자료형을 출력합니다.

자료형이 캐스팅 된것이 보이나요?? 이제 프로그램을 작성할 때 자료형을 헷갈리지 않게 입력하려면 형 변환을 잘 시켜줘야 합니다. 하지만 "안녕", "하세요" 같은 문자를 숫자로 변환한다고 int(), float()함수를 사용하게 되면 ValueError를 발생시킵니다. Error를 발생시키지 않게 하기 위해서는 형 변환을 할 때 조심해서 사용해야 합니다. 근데 숫자를 문자로 변환시키는건 가능합니다. 예를 보고 바로 넘어가도록 하겠습니다.

1행~3행은 num 변수를 int형으로 선언했지만 5~7행은 앞에 선언된 num변수를 str로 캐스팅 한 것 입니다.

 

format() 함수

  format() 함수는 문자열이 가지고 있는 함수로써, 숫자를 문자열로 바꿔주는 함수입니다. { } 중괄호를 포함해서 문자열 뒤 마침표를 찍고 format(매개변수)함수 괄호 안에 있는 매개변수로 대치 되는것입니다. 알아둬야 할 것은 대치될 매개변수의 갯수와 {} 중괄호 갯수가 같아야 합니다. 예제 코드를 보겠습니다.

string_a 변수에 { } 안에 format()함수의 매개변수 6이 대치되고 복합 대입 연산자인 +=로 파이팅을 덧붙혀서 다음과 같은 실행결과를 출력 하였습니다. format()함수는 여러가지 기능들이 있는데 다 설명을 하기엔 내용적으로 많다보니 중요한 소수점 제거하는 기능만 알아보겠습니다. 나머지는 혼공파 책을 사신분들은 이런게 있구나라고 한번 보고 넘어가시길 바랍니다~!!

format()함수에 매개변수로 6.0이 들어갔지만 :g 기능으로 인해서 소수점이 제거되었습니다.

 

이제 Chapter2-3 ~ 2-4까지 중요한 내용을 정리했고, Chapter3인 조건문에 대해서 포스팅 하겠습니다.

 

조건문

  조건문이란 프로그래밍에서 연산식이 참, 거짓에 따라 달라지는 계산이나 상황을 말합니다. 조건문에서는 불린 자료형을 사용하게 되는데 True(참)와 False(거짓)로 나뉩니다. 참과 거짓을 만들기 위해서는 앞에 배웠던 기본 연산자, 복합 대입 연산자와 다른 또 다른 연산자인 비교 연산자를 배워야 합니다. 

 

비교 연산자

비교 연산자 설명
== 왼쪽 피연산자랑 오른쪽 피연산자가 같다 ( a == b )
해설 : a와 b는 같습니다.
!= 왼쪽 피연산자랑 오른쪽 피연산자보다 다르다 ( a != b )
해설 : a와 b는 다릅니다.
 < 왼쪽 피연산자랑 오른쪽 피연산자보다 작다(크다) ( a < b )
해설 : a는 b보다 작습니다.
> 왼쪽 피연산자랑 오른쪽 피연산자보다 크다(작다) ( a > b ) 
해설 : a는 b보다 큽니다. 
<= 왼쪽 피연산자랑 오른쪽 피연산자보다 작거(크거)나 같다 ( a <= b )
해설 : a는 b보다 작거나 같습니다.
>= 왼쪽 피연산자랑 오른쪽 피연산자보다 크거(작거)나 같다 ( a >= b )
해설 : a는 b보다 크거나 같습니다.

큰 것을 비교하거나 작은것을 비교할 때 왜 둘다 썼냐면 개발자에 따라 (a < b)를 할 수도 있고 (b < a)를 할 수도 있기 때문입니다. 대부분 전자를 사용하겠지만 그래도 예외로 써봤습니다. 이제 소스코드를 보고 비교 연산자를 통해 참과 거짓을 판별해봅시다.

왼쪽 피연산자와 오른쪽 피연산자를 비교 연산자를 통해서 판별하면 0과 1이 아닌 True와 False로 출력됩니다.

이제는 비교 연산자가 아니라 논리 연산자를 배워보도록 하겠습니다.

 

논리 연산자

연산자 의미 설명
not 아니다 불 연산자를 반전시킵니다.
True -> False || False -> True
and 그리고 피연산자가 둘다 참 일때만 True
나머지는 다 False
or 또는 피연산자가 하나만 참이여도 True
둘다 거짓이면 False

and연산자와 or연산자를 잘 이해를 못할 수 있는데 참, 거짓을 1과 0인 바이너리 형태로 나타내보면 쉽게 알 수 있습니다.

and 연산자 or 연산자
1 and 1 = 1 (True) 1 or 1 = 1 (True)
0 and 1 = 0 (False) 0 or 1 = 1 (True)
1 and 0 = 0 (False) 1 or 0 = 1 (True)
0 and 0 = 0 (False) 0 or 0 = 0 (False)

논리 연산자를 이용한 소스코드를 간단하게 살펴 보겠습니다.

1행은 True의 반대니까 False가 출력 되었고, 2행은 and 연산자로써 피연산자 둘다 참일 때 True를 반환하니까 False가 되고, 3행은 둘 중에 하나만 참이라면 True를 반환하니까 True가 됩니다.

 

if 조건문

  if 조건문은 어떤 프로그래밍 언어를 배우더라도 꼭 필요한 문법입니다. 왜냐하면 프로그램을 개발할 때 참, 거짓에 따라 코드의 흐름을 바꿔주는 역할을 하기 때문입니다. if조건문을 통해서 사용자가 숫자를 입력하면 홀, 짝을 구분하는 소스코드를 보여드리고 소스코드를 설명하고 넘어가겠습니다.

① 1행에서는 int형으로 형 변환을 해주고 정수 하나를 입력받습니다.

② 첫번째 if 조건문에서 입력받은 number를 2로 나누었을 때 나머지가 0인 경우는 짝수이기 때문에 짝수입니다. 출력 짝수가 아닐경우 다음 조건문 실행합니다.

③ 첫번째 if 조건문에서 짝수가 아니였다면, 두번째 if 조건문에서 2로 나눈 나머지가 1일 경우 홀수입니다. 출력합니다.

 

if ~ else 조건문

  if ~ else 조건문은 위에 같이 if문을 여러개 해도 되지만 코드가 유연하지 않기 때문에 참이 아닌 거짓을 구분할 때 else를 붙혀줍니다. 위와 같이 홀짝을 구분하는 소스코드를 가지고 if ~ else로 작성해보겠습니다.

이렇게 보니 위에 소스코드와 달리 간단하게 코드를 작성할 수 있지 않나요?? 앞으로 if ~ else 구문을 활용합시다!!

근데 if ~ else 조건문은 조건이 3개 이상인것은 활용하지 못합니다.

 

if ~ elif 조건문

  if ~ elif 조건문은 if ~ else와 비슷한 형태이지만, 조건이 여러개 일 때 사용할 수 있게 구현되어 있습니다. 홀짝 같은 2가지의 조건이아닌 학교 성적을 나눌 때 90점 ~ 100점은 "A" 80 ~ 90점은 "B"등급 .... "F"등급까지 조건이 여러개 일 때 구현됩니다. 학생 성적등급을 매겨주는 소스코드를 보고 알아봅시다!!

책에 나와있는 소스코드랑 다르게 작성하다보니 좀 지저분?? 하게 나와버렸네요 ㅎㅎㅎ 책에 있는거처럼 하면 더 깔끔하게 소스코드를 작성할 수 있습니다. 저 처럼 논리연산자를 써도 구현할 수 있다고 알고계시면 될거같습니다.

 

이제 다 한번씩 알아보았는데요. 이제 기본미션을 푼걸 올리고 이만 포스팅을 끝내겠습니다.

이렇게 혼공파 2주차 미션까지 포스팅해보았는데요. 3주차때는 더 잘 쓰도록 하겠습니다 ㅎㅎㅎ

'Forensic > 혼공파 챌린지' 카테고리의 다른 글

혼공파 마지막 6주차 미션  (0) 2021.08.16
혼공파 5주차 미션  (0) 2021.08.07
혼공파 4주차 미션  (0) 2021.07.31
혼공파 3주차 미션  (0) 2021.07.25
혼공파 커리큘럼 및 1주차 미션  (1) 2021.07.08