WeniVooks

검색

위니브 월드(학생용)

창고 통합

1. 챕터의 목표

리스트: 리스트 인덱싱을 통하여 값을 호출하고 값을 변경할 수 있습니다.

숫자 연산: 숫자 연산을 할 수 있습니다.

반복문: for문 while문을 사용할 수 있습니다.

형변환: int, str, float 등을 통하여 형태를 변경할 수 있습니다.

2. 스토리

피카는 설계자입니다. 이미 많은 사업들을 성공시킨 경험을 가지고 있는 피카는 캣네생선에 모든 설계를 담당하고 있습니다.

캣네생선의 창고가 가득 차 더 이상 물고기를 보관할 곳이 없게 되었습니다. 이에 피카는 큰 창고를 지어 물고기를 보관하고자 합니다. 다만 몇 층의 창고를 만들지 고민입니다.

"허허, 재미나겠네요"

피카는 어려운 설계를 좋아합니다. 앞으로 캣네생선의 성장 속도를 계산하여 창고에 있는 모든 물고기를 더한 뒤 그 수의 10배가 되는 크기의 창고를 지으려 합니다.

창고는 한 층마다 100마리까지만 보관할 수 있습니다. 피카를 도와 몇 층의 창고가 필요한지 터미널에 출력해 주세요.

2.1 임무

한 줄은 하나의 창고입니다. 한 줄에는 오른쪽에서 왼쪽 순으로 일의자리, 십의자리, 백의자리 물고기가 있습니다. 예를 들어 (0, 3) 물고기가 2마리, (0, 4) 물고기가 4마리 있다면 해당 창고는 24마리 물고기가 있는 것입니다.

새로 지을 창고는 현재 창고에 있는 물고기의 10배를 담을 수 있도록 지어야 하니 240마리를 보관할 수 있는 창고가 필요합니다. 한 층에는 100마리만 보관할 수 있으므로 총 3층의 창고가 필요합니다.

창고에 있는 물고기를 모두 주워 리스트에 담고 몇 층의 창고를 지어야 할지 터미널에 출력해 주세요.

2.1.1 기본 코드
l = [0, 0, 0, 0] # [천의_자리, 백의_자리, 십의_자리, 일의_자리]
l = [0, 0, 0, 0] # [천의_자리, 백의_자리, 십의_자리, 일의_자리]
for i in l:
    print(i)
for i in l:
    print(i)
2.2 사용 코드

아래 코드들을 조합하여 문제를 풀어주세요.

mission_start()
mission_end()
move()
repeat(2, move)
pick()
print('hello world!')
show_item()
show_item()['fish-1']
10 + 10
10 * 3
10 // 3
10 >= 20
30 < 10
mission_start()
mission_end()
move()
repeat(2, move)
pick()
print('hello world!')
show_item()
show_item()['fish-1']
10 + 10
10 * 3
10 // 3
10 >= 20
30 < 10

3. 문제 풀이를 위한 개념

3.1 반복문

반복문은 우리가 원하는 횟수만큼 원하는 코드를 반복하는 것을 얘기합니다. 파이썬에서 사용하는 반복문은 for문과 while문이 있습니다.

3.1.1 for문

for문은 순회 가능한 요소에서 하나씩 꺼내 반복하는 방법을 얘기합니다. 아래 예를 들어보도록 하겠습니다.

형태는 아래와 같습니다.

for 변수 in 순회_가능한_요소:
    반복하고_싶은_코드
for 변수 in 순회_가능한_요소:
    반복하고_싶은_코드

아래 예제는 변수는 i 이고 순회 가능한 요소는 ‘hello’ 입니다. 여기도 if문과 마찬가지로 왼쪽 상단의 버튼을 이용해 for문의 범위를 접을 수 있습니다. for의 범위는 띄어쓰기가 4칸 되어있는 곳까지입니다.

print('반복문 시작')
for i in 'hello':
    print(i)
print('반복문 끝')
print('반복문 시작')
for i in 'hello':
    print(i)
print('반복문 끝')
반복문 시작
h
e
l
l
o
반복문 끝
반복문 시작
h
e
l
l
o
반복문 끝

여기서 print('반복문 끝')도 띄어쓰기 4칸을 하게 되면 아래와 같이 출력이 되게 됩니다. 띄어쓰기 4칸을 잘 맞춰서 의도하지 않는 구문이 반복되지 않도록 해주세요.

print('반복문 시작')
for i in 'hello':
    print(i)
    print('반복문 끝')
print('반복문 시작')
for i in 'hello':
    print(i)
    print('반복문 끝')
반복문 시작
h
반복문 끝
e
반복문 끝
l
반복문 끝
l
반복문 끝
o
반복문 끝
반복문 시작
h
반복문 끝
e
반복문 끝
l
반복문 끝
l
반복문 끝
o
반복문 끝

반복 가능한 요소는 문자열뿐만이 아닙니다. 대표적으로 우리 수업에서 배운 리스트, 딕셔너리 자료형은 순회가 가능합니다. 정수형과 실수형은 순회할 수 있지 않습니다.

리스트를 반복했을 경우입니다. 요소의 마지막까지 출력하면 반복문이 끝나는 것을 확인할 수 있습니다.

print('반복문 시작')
for i in [10, 20, 30]:
    print(i)
print('반복문 끝')
print('반복문 시작')
for i in [10, 20, 30]:
    print(i)
print('반복문 끝')
반복문 시작
10
20
30
반복문 끝
반복문 시작
10
20
30
반복문 끝

딕셔너리를 반복했을 경우입니다. 요소의 key값만 순회한다는 것을 확인할 수 있습니다. 마찬가지로 요소의 마지막까지 출력하면 반복문은 멈춥니다.

print('반복문 시작')
for i in {'one': 1, 'two': 2}:
    print(i)
print('반복문 끝')
print('반복문 시작')
for i in {'one': 1, 'two': 2}:
    print(i)
print('반복문 끝')
반복문 시작
one
two
반복문 끝
반복문 시작
one
two
반복문 끝

이렇게 어떠한 자료형이 아니라 단순 반복을 하고 싶을 때는 range를 사용합니다. range는 해당 횟수만큼 반복할 수 있도록 도와줍니다. range만 하더라도 매우 많은 학습이 필요합니다. 이 교안에서는 range의 모든 형태에 대해 학습하진 않습니다.

print('반복문 시작')
for i in range(3):
    print(i) # 3번 반복합니다.
print('반복문 끝')
print('반복문 시작')
for i in range(3):
    print(i) # 3번 반복합니다.
print('반복문 끝')
반복문 시작
0
1
2
반복문 끝
반복문 시작
0
1
2
반복문 끝
3.1.2 while문

while문을 사용하면 보다 직관적으로 반복을 할 수 있습니다. while은 뒤의 조건이 True인 동안 반복하는 반복문입니다.

print('반복문 시작')
count = 0
while count < 5:
    print(count)
    count = count + 1
print('반복문 시작')
print('반복문 시작')
count = 0
while count < 5:
    print(count)
    count = count + 1
print('반복문 시작')
반복문 시작
0
1
2
3
4
반복문 시작
반복문 시작
0
1
2
3
4
반복문 시작

위 예제에서 count = count + 1코드를 제외하면 무한 반복이 됩니다. 조건문을 탈출하는 조건을 꼭 명시해 주세요. 아래처럼 break을 통해서 반복문을 탈출할 수도 있습니다.

print('반복문 시작')
count = 0
while True:
    print(count)
    if count == 3:
        break
    count = count + 1
print('반복문 시작')
print('반복문 시작')
count = 0
while True:
    print(count)
    if count == 3:
        break
    count = count + 1
print('반복문 시작')
반복문 시작
0
1
2
3
반복문 시작
반복문 시작
0
1
2
3
반복문 시작
3.2 형 변환

형 변환은 type을 변경하는 것입니다. 예시로 설명을 드리도록 하겠습니다.

'10' + '10'
'10' + '10'

위 연산은 문자열끼리 더하기 이기 때문에 문자열을 이어 붙입니다. 따라서 출력 결과는 ‘1010’이 됩니다.

int('10') + int('10')
int('10') + int('10')

위 연산은 문자열을 정수형으로 변환했기 때문에 숫자끼리 덧셈을 합니다. 따라서 출력 결과는 20입니다.

이처럼 다른 type에서 원하는 타입으로 변환을 할 때 형 변환 함수를 사용합니다. 형 변환 함수로는 int(), float(), str(), list(), dict() 등이 있습니다.

2.7 무료 밥차2.9 자동화하자!