코딩입문/백엔드

코딩입문기-파이썬3버전-6 제어문2- elif , while , for

부산강주현 2022. 7. 6. 17:59

앞전 포스팅에서 if문의 사용법에 대해서 복습해보았다.
if문과 같이쓰이는게 else인데 이 두가지를 쓰면 구문이 늘어날 수로 들여쓰기가 많이 되어서 결국 시인성이 너무 안좋아진다.

elif

그래서 나온것이 elif문이다. 이것은 뭐냐면 if와 else를 합친것인데 기존의 '}else if{' 라는 구문을 사용하면 두줄 이상 작성을 해야하는데, elif한줄에 else와 if를 같이 작성함으로써 한줄에 다 나타낼 수 있는 것이다.
대신에 elif는 조건이 여러가지 일 때 써먹을 수 있다.

百聞이 不如一見 이라는 말이 있다. 백번 듣는것보다 한번 보는게 낫다 라는 뜻이다. 다들 알겠지만...

백문이 불여일견이라고 구구절절 설명하는것 보다 한번 실험을 해보도록 하자.

절대 코드를 작성하기 귀찮은것이 아님


전 포스팅에 사용했던 코드를 가져왔다.
아직도 가방 냅두고 나온것만 생각하면 치가 떨린다.

위와같이 클러치가 트루거나 펄스일때

if clutch:
print("낙민동에 있는 집으로 가주세요")
else:
print("동래에 있는 할리스커피로 가주세요")

라고 작성하면 벌써 4줄이 소모가 된다.

다른 프로그램을 elif로 사용을 한다면... 어제저녁에 소고기 수육과, 스지수육을 먹었으니 맥주먹을지 소주먹을지 정하는 프로그램을 작성해보기로 한다.

이런 식으로 사용한다.


이런식으로 사용하는데... 별로 편리성은 티가 안난다. 선택지를 좀 더 많이 줘보자. 소주맥주 두가지보다는 메뉴를 고르는게 나을것 같다.

치킨먹고싶다


elif문을 사용해서 나타낸 지금 당장 내가먹고싶은 메뉴이다.

좀 정갈한것 같긴 하다.

if문으로 작성해보았다

어 근데 왜 별 차이가 없지...? 라고 생각해서 공부하고있는 동생에게 물어보고 답이 안나와서 열심히 구글링을 했다.

사실상 만약에 받아주면? 안받아주면? 고민하는 상태에서 고백하면 100퍼센트 차인다.


위에 내용은 내가 아는 내용이다.

해당 블로그를 좀 더 읽어봤는데

애초에 의미 자체가 달랐다.
if는 만약에, else는 그렇지 않다면, elif는 만약 그렇지안다면 이 아니라 만약 그렇지 않다면 이건어떄? 라고 해석한다고 쓰여있다. 무작정 elif를 쓰려고 하니까 멍청하게 실수하는 부분이었네

이해하기 위해서 강의를 좀 돌려봤다.
강의를 확인 한 결과 elif는 조건의 선택지가 참과 거짓일때. 즉, 코드문이 yes or no로 이뤄진 트리형 코드문 일때 else if를 쓰면 들여쓰기를 계속 해야하는 부분을 elif로 한줄에 조건문을 적용하면서 코드가 짧아지는 것이었다.
강의에서는 점수에 따른 학점을 출력해주는 프로그램을 사용하였는데 이것을 술안주 메뉴로 4가지정도만 이용해서 작성해본다.
동래vs서면-> 소주 vs 맥주 ->한식vs중식 -> 메뉴1vs메뉴2
이정도 하면 이해하기 쉬울만한 프로그램이 나오리라....

대충 작성된 프로그램, 후술할 while문도 포함되어있다.


if 밑에 else 구문부터는 계속 들여쓰기가 들어간다.
elif를 사용하는 이유중 하나가 저런 들여쓰기가 계속 되면 코드문이 난잡해져서 읽기가 불편한 것이다.




비슷한 프로그램인데 난잡함의 정도가 다른 것을 확인할 수 있다.

while문

while문은 if, else처럼 "만약에" 라는 조건을 가지고 프로그램을 실행하냐 마냐를 설정하는것이 아닌,
A를 몇번 반복해라. 라는 구절을 지정할 수 있는 기능이다.
하지만 그 반복프로그램을 실행하는 조건이 "참" 이어야 반복을 실행할 수 있다.
점프투 파이썬 교재 130페이지에 '열 번 찍어 안 넘어 가는 나무 없다.' 라는 속담을 인용해서 나무를 베는 프로그램을 작성해놓았는데 한번 직접 실행해보기로 한다.

코드를 해석해보자면
treeHit = 0 //나무를 찍는 변수 지정
while treeHit < 10: //밑의 treeHit를 10번 반복하라(조건문)
treeHit = treeHit+1 // treeHit가 10번 반복되는동안 +1씩 하면서 카운트를 세어라
print("나무를 %d 번 찍었습니다!" %treeHit) //카운트 샌 수를 대입하면서 나무를 ~번 찍었습니다 하고 프린트
if treeHit == 10: //만약 treeHit 변수가 10이되면
print("쿵, 나무가 쓰러졌다!") //쿵, 나무가 쓰려졌다! 를 출력하라

이런 형식의 프로그램이다.
파이썬은 직관적인 문법이라 우리가 쓰는말과 지령이 비슷하다고는 하는데... 나는 잘 모르겠다

중요한 부분은 while treeHit <10: 이라는 조건문 부분이다.

whlie문 강제로 빠져나가기

while문은 조건이 참인경우 계속 반복을 하지만 위처럼 <10: 이라는 조건을 사용 후, 10번을 다 채우면 멈춘다.
하지만 실질적으로 예시프로그램과는 다르게 우리는 무수히 많은 경우의 수 안에 프로그램을 강제로 종료해야하는 경우가 있다.
교재 134페이지에는 이 경우를 자판기 음료수가 다 팔리고 매진되었을 때의 경우를 나타내고 있다.

한번 따라 실습해본다.

교재에 나온 예시대로 프로그램을 짠 후, 프로그램이 종료되는 if drink == 0의 시점에서 break 명령어를 써주면 종료문구가 튀어나온다.

while문 처음으로 되돌아가기

break 명령어가 프로그램을 멈추는 명령어라면, continue명령어를 사용해 프로그램을 계속 실행하게 만들 수 있다.

위의 예시 프로그램에 continue 명령어를 삽입해본다.

남은 음료수의 갯수를 출력하는 문구 밑에 continue 명령어를 넣어주니, if아래 부분이 전부 비활성화 된다.
결과창을 한번 보자.

음료수의 갯수가 -5000개를 넘어가다가 프로그램을 강제로 종료했다 ㅋㅋㅋㅋㅋㅋ

이렇듯 continue명령어는 프로그램을 종료하지 않고 죽을때까지 계속 이어지게 만들어주는 명령어이다.

for문

for문은 교재에 나온 내용으로는 파이썬의 직관적인 특성을 가장 잘 대변해주는 부분이라고 쓰여져있다.
while문과 비슷하게 for문도 반복문인데, 문장구조가 한눈에 들어온다고 한다.

위키독스에 기재되어있는 for문의 기본구조 설명. 점프투 파이썬 138페이지에도 똑같은 내용이 적혀있다.

교재에 나와있는 예시문제를 코딩해보았다.
먼저 test_list라는 변수에 3종류의 리스트를 작성하고,
for i in test_list: 라는 for문 을 작성한다. i라는 변수 안에 test_list를 대입하라는 뜻이다.
print(i) 마지막으로 i를 출력하면 위와같이 리스트안의 요소들이 차례로 튀어나오는 것을 확인할 수 있다.

for문은 아래와 같이 몇개의 리스트를 작성하고 그 값의 연산도 가능하다.

for (first, last) in a: 라는 뜻은 튜플 내의 리스트값을 first, last로 차례로 대입하라는 명령어이다.

print(first + last)

for문은 친구에게 도움을 받아서 좀 더 공부를 해야 나머지 부분을 포스팅할 수 있을것같다.


너무 덥다