Python 기본 - 8. 반복문 실습 예제

1번 문제 : 등차수열 형태로 별 쌓기

첫 번째 문제는 *을 1개, 아래는 2개, 3개 … 이런 식으로 쌓는 것이 목적이다.

결과물은 왼쪽 정렬된 형태인 ‘계단 모양’을 띄어야 한다.

1) 이중 for문을 사용하여 출력하기

1
2
3
4
5
6
7
8
9
10
for i in range(5):      # index : i and j
for j in range (i+1):
if j == i:
print("*"*(j+1), end="\n") # end 함수는 바로 뒤의 print에 영향을 줌

*
**
***
****
*****

여기서 end=”\n”의 의미는, print에 의해 결과값을 출력한 후 마지막에 ‘줄바꿈’하기.

end=”” 이런 식으로 사용해서 print 의 결과값을 계속 붙여 나갈수도 있다.

2) 하나의 for문을 사용하여 출력하기

1
2
3
4
5
6
7
8
for k in range(5):
print("*"*(k+1))

*
**
***
****
*****

2번 문제 : 문자열의 모든 인덱스를 리스트에 넣는 코드 만들기

두 번째 문제는 원하는 문자열을 입력 받은 후, 인덱스를 찾고 싶은 문자를 입력하면 찾아주는 코드를 짜는 것이다.

예를 들어, “string”을 입력하고 “t”를 입력할 경우, 1이 출력되어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
input_string = input("원하는 문자열을 입력하시오 : ")       # 문자열 입력받기
print("입력한 문자열은 {} 입니다.\n".format(input_string))
input_character = input("인덱스 찾기를 원하는 문자를 입력하시오 : ") # 문자 입력받기
print("입력한 문자는 {} 입니다.\n".format(input_character))

index_lst = [] # 비어 있는 인덱스 리스트 만들기

for i, chr in enumerate(input_string): # enumerate() 함수 사용
if chr == input_character:
index_lst.append(i)
print("{}의 index는 {} 입니다.".format(input_character, index_lst))

>>> input : jeongwook
입력한 문자열은 jeongwook 입니다.
>>> input : w
입력한 문자는 w 입니다.
w의 index는 5 입니다.

여기서 enumerate() 함수가 사용되었다.

enumerate는 “열거하다”라는 뜻으로, 이 함수는 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴하게 된다.

위의 예시에서는 input_string (문자열)을 입력받아, 인덱스값 (i)와 문자 (chr)가 함께 있는 객체를 for문에 의하여 가지고 있게 되었다.

이처럼 enumerate() 함수는 주로 for문 안에서 객체의 위치를 알고 싶을 때 자주 사용한다.

3번 문제 : 가운데 정렬로 별로 된 탑 쌓기

세 번째 문제는 *을 1개, 3게, 5개 … 이렇게 쌓아서 가운데 정렬 후 출력하는 것이 목표이다.

1) 이중 for문을 사용하여 출력하기

1
2
3
4
5
6
7
8
9
10
for i in range(5):
for j in range(5-i):
if j == (4-i):
print(" "*(j) + "*"*(2*i+1) + " "*(j))

*
***
*****
*******
*********

반복문을 사용하여, 빈칸 + 별모양 + 빈칸 이런 식으로 구성 후 출력하였다.

2) 하나의 for문을 사용하여 출력하기

1
2
3
4
5
6
7
8
for k in range(6):
print("{:^9}".format("*"*(2*k-1))) # 빈칸 9개에서 *을 가운데 정렬

*
***
*****
*******
*********

여기서는 앞서 배웠던 format 함수를 사용한 ‘가운데 정렬’을 사용하였다.

4번 문제 : 숫자 맞추기 게임

마지막 문제는 1부터 100 사이의 숫자를 하나 랜덤하게 생성하고, 이를 맞추는 게임을 짜는 것이다.

숫자를 하나 생성하고, 그 다음 사용자가 숫자를 입력하면 이 둘을 비교하여 ‘높음’, ‘낮음’, ‘맞췄다’를 출력해야 한다.

또한, 몇 번의 guess 끝에 답을 맞췄는지 시도한 횟수를 값으로 출력해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import random
selected_number = random.randrange(1,101)
print("1부터 100까지 수 중에서 랜덤하게 생성된 숫자는 {} 입니다.\n".format(selected_number))

input_number = int(input("1부터 100까지 수 중에서 하나를 선택하여 입력하시오 : "))
print("입럭한 숫자는 {} 입니다.\n".format(input_number))

trial = 0
while True:
trial += 1
if input_number > selected_number:
print("높습니다\n")
input_number = int(input("숫자를 다시 입력하세요 : "))
elif input_number < selected_number:
print("낮습니다\n")
input_number = int(input("숫자를 다시 입력하세요 : "))
else:
print("맞췄습니다!\n")
break
print("당신은 {} 번 만에 숫자를 맞췄습니다.".format(trial))

>>> 1부터 100까지 수 중에서 랜덤하게 생성된 숫자는 16 입니다.
>>> 1부터 100까지 수 중에서 하나를 선택하여 입력하시오 : 21

입럭한 숫자는 21 입니다.
높습니다

>>> 숫자를 다시 입력하세요 : 15
낮습니다

>>> 숫자를 다시 입력하세요 : 18
높습니다

>>> 숫자를 다시 입력하세요 : 16
맞췄습니다!

당신은 4 번 만에 숫자를 맞췄습니다.

여기서 하나 주목할 점은 random 함수 이다.

처음에 import random을 통해 모듈을 불러왔고, 이를 통해서 random.randrange()와 같은 함수를 사용할 수 있게 되었다.

이름에서 알 수 있듯이, 이 함수는 (x,y)를 입력하면 x이상 y미만의 범위 내에서 랜덤하게 숫자를 하나 생성하는 기능을 가진다.

유사한 연습 문제들을 보통 1학년 컴퓨터 프로그래밍 수업 시간에 접하곤 한다.

주로 C로 짜보게 되는데, python은 상대적으로 코드들이 간단하게 구현된다. 파이썬 최고!