슈팅 기회가 총 5번인 슈팅 게임 알고리즘을 간단히 짜 보자. 기회 변수를 shoot이라고 하고, 슈팅을 한 번 할 때마다 shoot이 1씩 차감되도록 하자. 그리고 “기회가 남아 있는 한 슈팅을 반복”하도록 하자. 먼저 한글로 코딩해보자.
shoot = 5 # 현재 남아 있는 슈팅 기회
슈팅 기회가 남아 있는 동안 아래 내용을 반복:
print("슛! 이제 shoot-1번의 기회가 남았습니다.")
shoot 1씩 차감
오늘은 위 의사코드에서 “~하는 동안 아래 내용 반복” 부분을 구현하기 위한 “반복문”을 배울 것이다.
파이썬에서 반복문을 구현하기 위한 문법은 크게 2가지가 있다. 첫째는, while문이고, 둘째는 for문이 있다.
1.while문
while문의 기본 구조는 아래와 같다.
while 조건 :
결과
그러면 위 ‘조건’이 참인 동안에 ‘결과’가 계속 실행된다. 그리고 ‘조건’이 참이 아니면 반복을 종료하게 된다. 위 의사코드를 실제 코드로 옮기면 아래와 같다.
shoot = 5 # 현재 남아 있는 슈팅 기회
while shoot > 0 :
print(f"슛~! 이제 {shoot - 1}번의 기회가 남았습니다.")
shoot -= 1
2. 무한 반복문(무한 루프)
이제 슈팅 기회가 무제한으로 바뀌었다고 하자. 대신, 슛을 한 번 할 때마다 지금까지 한 슈팅 횟수를 출력하도록 하자. 그러면 while문을 계속 수행하도록 하기 위해 조건을 항상 참이 되도록 바꾸면 된다. 일반적으로 아래와 같이 ‘while True’ 를 쓰면 무한 반복문(무한 루프)을 구현할 수 있다.
while True :
실행결과
Q. 아래 빈 칸을 채워 무제한 슈팅 알고리즘을 짜 보자.
shoot = 0
while ( ) :
print(f"슛~! { }번째 슛입니다.")
( )
무한 반복문에 중단 조건을 따로 설정하지 않으면 정말로 무한히 루프를 돌게 되므로, 도중에 중단할 수 있는 조건을 설정해 주도록 하자. 형식은 아래와 같다.
while True :
실행결과
if 중단 조건 :
break
Q. 무제한 슈팅 알고리즘에 중단 조건을 설정하여, 슈팅 횟수가 1500 이상이 되면 멈추도록 코드를 짜시오.
shoot = 0
while ( ) :
print(f"슛~! { }번째 슛입니다.")
( )
# 아래에 코드 추가할 것
3.for문
먼저 아래 리스트로부터 while문을 써서 1부터 8까지의 숫자를 연속적으로 출력하도록 코딩해 보자.
alist = [1,2,3,4,5,6,7,8]
k=0
while k < len(alist) :
print(alist[k])
k += 1
이와 같이 순서가 있는 상황에서 무언가를 반복할 때는 아래의 for문이 더 유용하다. 형식은 아래와 같다.
for 반복 조건 :
실행 결과
1부터 8까지 연속적으로 출력했던 과정을 for문을 써서 아래와 같이 간결하게 할 수 있다.
alist = [1,2,3,4,5,6,7,8]
for k in alist :
print(k)
특히, 앞으로 이와 같이 연속된 정수 모음을 자주 다루게 될텐데, 그럴 때 유용한 것이 range 객체이다.
range(a,b) : a이상 b미만의 연속된 정수로 이루어진 순회 가능 객체
for k in range(1,9) :
print(k)
for문의 중단 조건 역시 while문에서와 같이 마찬가지로 break를 써서 구현할 수 있다.
for k in range(1,9) :
print(k)
if k > 5 :
break
Q. 공장에서 물건을 생산한다고 하자. 각 생산품의 데이터를 fac_data 리스트에 담는다고 하자. 공정의 조건은 아래와 같다.
1)공정 조건
-생산품 통과 조건 : 데이터 값이 정수여야 한다
-fac_data의 각 생산품을 1초에 하나씩 순회하면서 값이 정수가 아닌 데이터 발견 시, “불량품 발생. 공정 중단”이라는 문구 출력과 함께 공정을 중단한다.
2) 위 조건1)을 참고하여 아래 빈 칸을 채워 코드를 완성하시오.
import time
fac_data = [30,31,32,31,30,34,31,32,30,33,32,30,31,30,31,31,29,31,30,30,32,32,33,31,31,32,30.3,30,30,32,34,31,32.2,30,33,32.2,30.1,30,34,31.5,32.3,30,30.2,30,30,32,34.1]
( ) k in range( ) :
print(fac_data[ ])
time.sleep(1) # 1초 지연
( ) type(fac_data[k]) ( ) int : # fac_data[k]의 타입이 정수가 아니면
print("불량품 발생. 공정 중단.")
( )
Q. 리로스쿨에 가서 포트폴리오 제출하기
[리로스쿨] – [활동보고서] – [포트폴리오] – [동아리] – [17번글]
댓글 남기기