본문 바로가기
프로그래밍/파이썬

모두의 파이썬 - DAY 10 (while 명령으로 반복하기)

by Tilog 2021. 11. 15.
728x90
반응형

오늘 모두의 파이썬 10번째 시간은

for문 이외의 또 다른 반복문 'while'에 대해서 알아보도록 하자!

 

 

while 명령으로 반복해서 숫자를 출력하는 프로그램

반복

while은 '~하는 동안에'라는 뜻을 가지고있는데

파이썬에서도 그대로 쓰면 된다! 위 사진을 보면

'x가 10 이하인 동안 계속 반복!' 한다는 뜻 이다.

 

결과

그래서 매커니즘을 보면

처음 x가 1로 선언이 되었으므로

while문의 조건(x가 10이하)에 부합한다.

따라서 print(x)에 의해 '1'이 화면에 출력.

그리고 x는 1이 더해져 2가되고 10까지 반복된다.

다만 x=10일 때 마지막 x=x+1까지 진행이 되지만

그 다음은 x가 11이 되기때문에 while문의 조건에 부합하지 않아

반복은 여기서 종료된다.

 

 

 

1부터 10까지 숫자의 합계를 구하는 프로그램

 

 

합계 구하기

이번엔 for문에서도 했던 1부터 10까지의 합게를 구하는 프로그램을 만들어보자.

합계로 사용할 변수s와 x를 선언해주자 x값은 1로!

그리고 또 'while x<=10:'으로 x가 '10이하인 동안'을 나타내는 반복문 생성

그리고 s = s + x로 다시 선언해준다. 원래 s값에 x를 더한다는 뜻.

그리고 x값과 합계 s를 출력한 후 x에 1을 더해주고 다시 while문 처음으로.

 

결과

그러면 위와 같은 결과가 나온다.

처음 x가 1이였으므로 while문의 조건(x가 10 이하인 동안)에 충족.

s = s(0) + x(1) 이므로 화면에

x: 1 sum: 1 로 출력.

그리고 x= 1 + 1 =2가 되고 while문의 조건에 또 충족하므로 반복

그리 하여 x=10까지 반복을 하고 합이 55가 뜬 후 마무리된다.

 

 

 

 

 

 

 

 

숫자를 추측해서 맞히는 프로그램

숫자 맞히기 놀이

이번엔 숫자를 맞히는 놀이를 해보자.

컴퓨터가 랜덤한 수를 제시하면 유저가 그 수를 맞히는 게임이다.

랜덤한 수를 제시해야 하므로 'import random'을 사용해 모듈을 불러온다.

그리고 변수 n을 선언 후 'random.randint(1,30)' 1~30 사이에 있는 임의의 수를 뽑는다.

그리고 while문을 시작하는데 이번엔 옆에 'True'도 같이 붙여준다.

꼭 맨앞에 T는 대문자로 해야한다. True는 영원히 반복한다는 뜻 이다.

 

그리고 변수 x를 선언해주고 사용자가 문제를 제시받고 답을 입력할 수 있도록 'input'을 사용한다.

변수 g도 선언하고 값은 x에 입력한 수를 'int'에 의해 정수로 받는다.

그리고 'if'문을 사용하여 유저가 입력한 답(g)과 컴퓨터가 제시한 수(n)이 맞으면 

"정답"을 출력하고 'break'에 의해 while문은 종료된다.

 

오답일 경우 유저가 입력한 수가 컴퓨터에서 제시한 수보다 크냐 작느냐에 따라

if g < n: 혹은 if g >n:을 이용하여 

작고,크다는 문구를 출력해준다.

결과

그럼 위와 같이 나온다.

 

간단히 더 추가해보자

사실 책에서 제시한 내용은 이미 끝났다. 하지만 호기심이 발동했고 단순히 정답 이외에 수가 나오면

크다,작다 만 나오는게 좀 단조로워서 정답에 근접했을 때(오차범위 -+1) 거의 다왔다는 맨트를 출력 해보고 싶었다.

그래서 저번에 배웠던 '아닐경우(!=)'를 이용해봤다.

 

처음엔 정답과 오차범위 +-1일 경우

"오 거의 다 왔어 좀만 더 힘내!"이 출력되게 했다.

위 사진과 같이 범위를 나누니

 

실패

코드상 오류는 없었지만 내가 원하는데로 나오진 않았다.

나는 근사치일 경우 "오 거의 다 왔어 좀만 더 힘내!"만 출력시키고 싶었기 때문이다.

근데 위 경우는 정답이 '15'였고 내가 입력한 정답은 15보다 1작고 15보다 작기때문에

if g == n-1과 if g < n 두 if문이 동시 작동하여

문구가 겹쳐 뜬 것 이였다.

재도전

그래서 위에 오차범위 +-1 부분은 놔두고

마지막줄 에있는 코드를 손봤다.

g < n '그리고(and)' g!=n-1: 

g > n '그리고(and)' g!=n+1:

위와 같이 한 if문에 2가지의 경우를 넣어

문구가 겹치는 상황을 없애고자 했다.

 

 

 

성공!

결과는 성공했다.

이번에도 정답이 '15'였는데 정답을 맞히기 직전

14를 입력했을 때 "ㄴㄴ 넘 작다."는 뜨지 않았고

"오 거의 다 왔어 좀만 더 힘내!" 만 떴다.

 

 

뭐 별거 아니긴 하지만 이 때 느낀건

수학적 사고력이 뛰어나면 그냥 해결될 문제였을텐데... 싶었던 것 이다.

실제로 학창시절 고등학교 과정까지의 수학을 잘 했던 친구들이

더 빠르게 문제 해결 방안을 떠올리지 않을까 하는 생각을 했다.

 

728x90
반응형

댓글


#네이버 애널리틱스 ▼