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()
*주의사항 : 제가 직접 푼 것이므로 틀린 부분이 있을 수 있습니다. 오타나 틀린 부분 지적 환영!
'Back-End > Python' 카테고리의 다른 글
파이썬 for Beginner 3판 9장 Self Study + 연습문제 답(더보기 클릭) (0) | 2023.06.01 |
---|---|
파이썬 for Beginner 3판 7장 Code07-07.py 문제 오류 (0) | 2023.05.04 |
파이썬 for Beginner 3판 5장 Self Study + 연습문제 답(더보기 클릭) (0) | 2023.05.02 |
파이썬(Python) pipenv 오류 해결 방법 (0) | 2023.05.01 |
파이썬 for Beginner 3판 4장 Self Study + 연습문제 답(더보기 클릭) (0) | 2023.05.01 |