Self Study

6-1 Code06-03.py를 0과 100 사이에 있는 7의 배수 합계를 구하도록 수정해 보자.

출력 결과
0과 100 사이에 있는 7의 배수 합계 : 735

 

더보기

답 :

i, hap = 0, 0

for i in range(0, 100, 7) :
    hap = hap + i

print("0과 100 사이에 있는 7의 배수 합계 : %d" % hap)

 

6-2 Code06-06.py를 수정해서 입력한 단을 거꾸로 출력하도록 해 보자.

출력 결과
단을 입력하세요 : 7
9 X 7 = 63
8 X 7 = 56
... 중략 ...
1 X 7 = 7

 

i, dan = 0, 0

dan = int(input("단을 입력하세요 : "))

for i in range(9, 0, -1) :
    print("%d X %d = %2d" % (dan, i, dan*i))

 

6-3 Code06-07.py를 각 단의 제목이 출력되도록 수정해 보자.

출력 결과
## 2단 ##
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6

 

더보기

답 :

i, k = 0, 0

for i in range(2, 10, 1) :
    print("## %d단 ##" % (i))
    for k in range(1, 10, 1) :
        print("%d X %d = %2d" % (i, k, i * k))
    print("")

 

6-4 Code06-08.py를 구구단이 거꾸로 출력되도록 수정해 보자.

힌트 range() 함수의 값을 큰 값에서 작은 값으로 변경되도록 해야 한다.

 

더보기

답 :

## 전역 변수 선언 부분 ##
i, k, guguLine = 0, 0, ""

## 메인 코드 부분 ##
for i in range(9, 1, -1) :
    guguLine = guguLine + ("# %d단 #" % i)

print(guguLine)

for i in range(9, 0, -1) :
    guguLine = ""
    for k in range(9, 1, -1) :
        guguLine = guguLine + str("%2dX %2d= %2d" % (k, i, k * i))
    print(guguLine)

 

6-5 Code06-05.py를 while 문으로 수정해 보자.

힌트 Code06-09.py를 참고한다.

 

더보기

답 :

i, hap = 0, 0
num1, num2, num3 = 0, 0, 0

num1 = int(input("시작값을 입력하세요 : "))
num2 = int(input("끝값을 입력하세요 : "))
num3 = int(input("증가값을 입력하세요 : "))

i = num1
while i < num2+1 :
    hap = hap + i
    i = i + num3

print("%d에서 %d까지의 %d씩 증가시킨 값의 합계 : %d" % (num1, num2, num3, hap))

 

6-6 $를 입력하면 while 문을 빠져나가도록 Code06-12.py를 수정해 보자.

 

더보기

답 :

hap = 0
a, b = 0, 0

while True :
    a = input("더할 첫 번째 수를 입력하세요 : ")
    if a == "$" :
        break
    a = int(a)
    b = int(input("더할 두 번째 수를 입력하세요 : "))
    hap = a + b
    print("%d + %d = %d" % (a, b, hap))

print("$을 입력해 반복문을 탈출했습니다.")

 

6-7 출력 결과가 동일하도록 Code06-13.py를 while 문으로 변경해 보자.

 

더보기

답 :

hap, i = 0, 0

while i < 101 :
    i += 1
    hap += i

    if hap >= 1000 :
        break

print("1~100의 합계를 최초로 1000이 넘게 하는 숫자 : %d" % i)

 

6-8 Code06-15.py를 모두 for 문으로 변경해 보자. 출력은 하트 모양을 사용하는데, 하트 모양의 유니코드는 16진수 '2665'이다.

*글꼴 차이로 기울인 형태로 보일 수 있음.

 

더보기

답 :

## 전역 변수 선언 부분 ##
i, k = 0, 0

## 메인 코드 부분 ##
i = 0
for i in range(0, 9) :
    if i < 5 :
        k = 0
        for k in range(0, 4 - i) :
            print(' ', end = '')
            k += 1
        k = 0
        for k in range(0, i * 2 + 1) :
            print('\u2665', end = '')
            k += 1
    else :
        k = 0
        for k in range(0, i - 4) :
            print(' ', end = '')
            k += 1
        k = 0
        for k in range(0, (9 - i) * 2 -1) :
            print('\u2665', end = '')
            k += 1
    print()
    i += 1

 

연습문제

1. for 문의 기본 형식을 참고해 빈칸을 채우세요.

시작값, 증가값, 끝값, 끝값+1
for 변수 in range([     ①     ], [     ②     ], [     ③     ]) :
       이 부분을 반복

 

더보기

답 : ① 시작값     ② 끝값+1     ③ 증가값

 

2. 다음 for 문은 몇 번 반복되는지 고르세요.

for i in range(0, 101, 1) :
	print("여기를 반복")

① 0번     ② 1번     ③ 100번     ④ 101번

 

더보기

답 : 4

 

3. 다음 중 출력되지 않는 값을 하나 고르세요.

for i in range(5, -1, -1) :
	print("%d")

① 5     ② 1     ③ 0     ④ -1

 

더보기

답 : 4

 

4. 다음 코드는 1부터 1000까지 5의 배수의 합계를 출력하는 코드입니다. 반칸에 올바른 코드를 고르세요.

hap = 0
for i in range(          ) :
	hap += i
print(hap)

① 0, 1000, 5

② 0, 1001, 5

③ 1, 1000, 5

④ 1, 1001, 5

 

더보기

답 : 2

 

5. 다음은 15단을 거꾸로 출력하는 코드입니다. 빈칸을 채우세요.

실행 결과
15 X 9 = 135
15 X 8 =120
15 X 7 = 105
15 X 6 = 90
15 X 5 = 75
15 X 4 = 60
15 X 3 = 45
15 X 2 = 30
15 X 1 = 15

 

dan = 15
for i in range(     ①     ) :
	print("%d X %d = %3d" % (     ②     ))

 

더보기

답 : 9, 0, -1     ② dan, i, dan * i

 

6. 다음 코드가 "쿡북~"을 몇 번 출력하는지 쓰세요.

for i in range(4) :
	for j in range(3) :
    	for k in range(2) :
         print("쿡북~")

 

더보기

답 : 24번

 

7. while() 문의 문법에 맞는 것을 고르세요.

① while(초깃값, 끝값+1, 증가값)

while(반복횟수)

while(조건식)

while(초깃값)

 

더보기

답 : 3

 

8. 다음은 for 문을 사용해서 1234부터 4567까지 444의 배수의 합계를 구하는 코드입니다. while 문으로 변경해서 코드를 다시 작성하세요.

hap = 0
for n in range(1234, 4568) :
	if n%444 == 0 :
    	hap += n
        
print(hap)

 

 

더보기

답 :

hap, n = 0, 1234
while n < 4567 :
        n += 1
        if n%444 == 0 :
                hap += n
        
print(hap)

 

9. for 문을 사용해서 3333부터 9999까지의 숫자 중에서 1234의 배수의 합계를 구하되, 합계가 100000(십만)이 넘기 직전까지만 합계를 구하는 코드를 작성하세요. 단, 코드에는 continue와 break를 모두 사용해서 작성하세요.

출력 결과
40722

*교재의 문제 지문에서는 97063이라고 나와 있으나, 문의 결과 40722이 맞다고 답장이 와서 수정하여 올립니다.

 

더보기

답 :

hap, i = 0, 0

for i in range(3333, 10000) :
    if i % 1234 != 0 :
        continue
    
    hap += i

    if hap >= 100000 :
        break

print(hap)

 

10. 182쪽의 [응용예제 01]을 수정해 입력한 숫자의 두 배만큼 별을 출력하도록 프로그램을 작성하세요. 예를 들어 5914를 입력하면 다음과 같이 출력됩니다.

힌트 별 모양의 유니코드는 '\u2605'이다.

 

더보기

답 :

## 변수 선언 부분 ##
i, k, starNum = 0, 0, 0
numStr, ch, starStr = "", "", ""

## 메인 코드 부분 ##
if __name__ == "__main__" :
    numStr = input("숫자를 여러 개 입력하세요 : ")
    print("")
    i = 0
    ch = numStr[i]
    while True :
        starNum = int(ch)

        starStr = ""
        for k in range(0, starNum * 2) :
            starStr += "\u2605"
            k += 1

        print(starStr)

        i += 1
        if (i > len(numStr) -1) :
            break

        ch = numStr[i]

 

11. 3부터 100까지의 숫자 중에서 소수(Prime Number)를 출력하는 코드를 작성하세요. 소수란 1과 자기자신만으로 나누어 떨어지는 정수를 말합니다. 즉, 2부터 자기자신 -1까지 나눠봐서 한 번도 나누어 떨어지지 않으면 소수입니다. 예로 5는 2, 3, 4로 각각 나누어서 한 번도 나누어 떨어지지 않으므로 소수입니다. 13도 2, 3, ..., 12까지 한 번도 나누어 떨어지지 않으므로 소수입니다.

3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

 

더보기

답 :

num, i = 0, 0

for num in range(3, 101) :
    for i in range(2, num - 1):
        if num % i == 0 :
            break
    else :
        print(num, end = ' ')

 

12. 거북이가 화면에 별모양을 계속 그리는 코드를 작성하세요. 별의 한 변은 10~200 사이로 하고, 별의 위치 및 색상은 랜덤하게 지정합니다.

힌트 별은 5개 선분으로 되어 있고, 144도씩 각도를 회전하면서 그리면 된다.

 

더보기

답 :

맨처음 시작 할 때 거북이가 변 하나를 그리는데 왜인지 원인을 찾지 못했습니다. 참조만 해주세요!

import turtle
import random

## 전역 변수 선언 부분 ##
swidth, sheight = 500, 500

## 메인 코드 부분 ##
turtle.title('거북이가 랜덤한 별 그리기')
turtle.shape('turtle')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
turtle.pensize(3)

while True :
    angle = random.randrange(0, 360)
    dist = random.randrange(1, 100)
    turtle.left(angle)
    turtle.forward(dist)

    side = random.randint(10, 200)
    r = random.random()
    g = random.random()
    b = random.random()
    turtle.pencolor((r, g, b))
    turtle.pendown()
    for i in range(0, 5):
        turtle.forward(side)
        turtle.left(144)
    turtle.penup()

 

 

*주의사항 : 제가 직접 푼 것이므로 틀린 부분이 있을 수 있습니다. 오타나 틀린 부분 지적 환영!

+ Recent posts