기록

심리학도를 위한 매트랩 Matlab 기초: 4. 조건문(if문) 본문

must-have-tech/매트랩

심리학도를 위한 매트랩 Matlab 기초: 4. 조건문(if문)

이제언 2022. 3. 24. 00:06

우리가 이제 실험을 하나 만들어야 한다고 가정해봅시다.

이 실험에서는 피험자가 아동/청소년인지 성인인지에 따라서 안내를 다르게 해야합니다.

안내문을 출력하는 거는 아는데... 아동청소년인지 성인인지에 따라 안내를 어떻게 다르게 출력할 수 있을까요?

이 때 필요한 것이 조건문(if문) 입니다.

If문 쓰는 법

if 조건문
    조건이 참이면 실행

else
    조건이 거짓이면 실행
end

그렇다면 우리는 이렇게 코드를 구상할 수 있습니다.

피험자가 아동청소년인지 성인인지 입력받기

만일 아동청소년이면?

    "이 실험은 아동청소년을 위한 실험입니다." 출력하기

아동청소년이 아니면? (=성인이면?)

    "이 실험은 성인을 위한 실험입니다." 출력하기

 

피험자(사용자)의 반응을 입력받는 명령어는 input() 입니다. 이 명령어와 위의 조건문을 활용하여 코드를 작성해 볼까요?

adult = input("성인이면 1, 아동청소년이면 0을 입력해 주십시오: ");
if adult == 0
    disp("이 실험은 아동청소년을 위한 실험입니다.");
else
    disp("이 실험은 성인을 위한 실험입니다.");
end

조건문을 사용하기 위해서는 전 포스팅에서 다룬 비교연산자를 사용하게 됩니다. 코드를 하나씩 살펴볼까요?

먼저 input값을 adult 변수에 할당을 하기 위해 adult = input()을 했습니다. 저는 여기에서 피험자에게 어떤 입력을 해야 하는지 설명하기 위해 input() 명령어 안에 ""를 이용해 설명을 적었습니다. 이 방식을 이용하면 입력값을 받을 때 하고싶은 말을 출력할 수 있게 됩니다. 물론 비워 놓으면 아무 것도 뜨지 않고 입력값을 받겠죠?

그 다음 줄에서는 if adult == 0 이라고 적었는데요, ==는 비교연산자입니다. 만일 adult가 0과 같은 것이 참이라면 if 다음 줄이 실행이 됩니다. 저는 참가자에게 아동청소년이면 0을 입력하라고 하였으니, 참가자가 0을 입력했다면 if문 다음 줄이 실행이 되겠죠?

else는 만일 if문이 사실이 아니라면 다음 줄을 실행을 한다는 뜻입니다. 저 코드에서 참가자가 1을 입력했다면 if문은 거짓이 되어 넘어가고, 자동으로 else문이 실행됩니다.

 

지금까지 포스팅하면서 제가 어떤 문장에서는 세미콜론 ; 을 찍고 어떤 문장에서는 세미콜론을 넣지 않았는데요.

세미콜론 ; 은 한 문장을 실행할 때 실행값을 보이지 않게 합니다.

예시로, 위의 저 코드 adult = input("성인이면 1, 아동청소년이면 0을 입력해 주십시오: "); 에서 ;를 뗀다면 어떻게 실행이 될까요?

세미콜론을 붙였을 때
세미콜론을 붙이지 않았을 때

차이가 보이시나요?

세미콜론이 있을 때는 adult값을 보여주지 않았는데, 세미콜론이 없어지니 값을 받으면 adult = 1이라고 보여주는군요!

그래서 보통 값을 확인하고 싶거나 디버깅(버그를 잡는 것)을 할 때는 ;를 붙이지 않을 수 있지만, 굳이 일일히 처리되는 값을 출력하고 싶지 않다면 ;를 붙여줄 수 있습니다.

 

그런데, 실험을 아동과 청소년, 성인 세 가지 버전으로 준비했다면 어떻게 작성해야 할까요?

이 때는 elseif 를 쓸 수 있습니다.

 

if 조건문1
    조건1이 참이면 실행

elseif 조건문2
    조건1이 거짓이고 
조건2가 참이면 실행

else
    조건 1,2 전부 거짓이면 실행
end

그렇다면 우리는 코드를 어떻게 구상하고 적을 수 있을까요?

직접 한 번 해 보시고 아래 더보기를 클릭해주세요!

 

더보기

코드 구상

 

피험자가 아동인지 청소년인지 성인인지 입력받기

만일 아동이면?

    "이 실험은 아동을 위한 실험입니다." 출력하기

아동이 아니고 청소년이면?

    "이 실험은 청소년을 위한 실험입니다." 출력하기

아동도 청소년도 아니라면? (=성인이라면?)

    "이 실험은 성인을 위한 실험입니다." 출력하기

 

코드 작성

adult = input("성인이면 1, 아동이면 0, 청소년이면 -1을 입력해 주십시오: ");
if adult == 0
    disp("이 실험은 아동을 위한 실험입니다.");
elseif adult == -1
    disp("이 실험은 청소년을 위한 실험입니다.");
else
    disp("이 실험은 성인을 위한 실험입니다.");
end

 

 


 

 

 그런데 여기서, 안내문을 출력한 다음 아동이거나 청소년인 피험자에게는 주위에 보호자가 있는지 확인해달라는 문구를 출력하고 싶을 때는 어떻게 해야할까요?

우리가 지금까지 배운 대로 한다면 이렇게 적용할 수 있겠군요.

if adult == 0
    disp("주위에 보호자가 있는지 확인해주세요.");
elseif adult == -1
    disp("주위에 보호자가 있는지 확인해주세요.");
end

물론 이렇게 코드를 작성해도 되지만, 저번 포스팅에서 다룬 논리 연산자를 이용한다면 이 코드를 더 줄일 수 있습니다.

코드 구상

만일 아동이거나 청소년이라면?

    안내문을 출력한다.

 

실제 코드

 

if adult == 0 || adult == -1
    disp("주위에 보호자가 있는지 확인해주세요.");
end

 

| 는 or을 뜻하는 연산자입니다. ₩나 \에 shift키를 누르면 나오는 연산자에요. 그런데 왜 위 코드에는 |를 || 이렇게 두 번 적었을까요?

|나 ||, &나 && 둘 다 똑같이 "또는" 과 "그리고" 연산을 하는 건 맞지만, 작동 방식이 약간 다릅니다. 일반적으로 ||, && 연산이 더 빠르지만 이 연산자는 scalar연산에서만 사용가능합니다. 음, scalar연산이 뭐지? 하시는 분도 계시겠죠? 그냥 보통의 상황에서는 어찌됐건 더 빠른 ||나 &&를 쓰고, 이게 먹히지 않을 때는 (코드 밑에 빨간 줄이 그어졌을 때는) |나 &를 쓰시면 됩니다.

 

이건 다양한 바리에이션이 존재할 수 있겠죠? 위 코드에서는 if adult == 0 || adult == -1이라고 썼지만, if adult ~= 1 로 성인이 아닐 경우를 조건으로 걸어도 됩니다. 어떤 방식을 사용하던 작동만 하면 됩니다!

Comments