Self Study

9-1 Code09-03.py를 수정해서 커피 종류를 아메리카노, 카페라떼, 카푸치노, 에스프레소 중 하나를 선택할 수 있도록 하자. 그리고 로제, 리사, 지수, 제니라는 손님 4명의 주문을 받아 보자.

출력 결과
로제씨, 어떤 커피 드릴까요?(1:아메리카노, 2:카페라떼, 3:카푸치노, 4:에스프레소) 4
#1. (자동으로) 뜨거운 물을 준비한다.
#2. (자동으로) 종이컵을 준비한다.
#3. (자동으로) 에스프레소를 탄다.
#4. (자동으로) 물을 붓는다.
#5. (자동으로) 스푼으로 젓는다.
로제씨~ 커피 여기 있습니다.
… 생략 …

 

더보기

답 :

## 전역 변수 선언 부분 ##
coffee = 0

## 함수 선언 부분 ##
def coffee_machine(button) :
    print()
    print("#1. (자동으로) 뜨거운 물을 준비한다.");
    print("#2. (자동으로) 종이컵을 준비한다.");

    if coffee == 1 :
        print("#3. (자동으로) 아메리카노를 탄다.")
    elif coffee == 2 :
        print("#3. (자동으로) 카페라떼를 탄다.")
    elif coffee == 3 :
        print("#3. (자동으로) 카푸치노를 탄다.")
    else :
        print("#3. (자동으로) 에스프레소를 탄다.")

    print("#4. (자동으로) 물을 붓는다.");
    print("#5. (자동으로) 스푼으로 젓는다.");
    print()
        
## 메인 코드 부분 ##
coffee = int(input("로제씨, 어떤 커피 드릴까요?(1:아메리카노, 2:카페라떼, 3:카푸치노, 4:에스프레소)"))
coffee_machine(coffee)
print("로제씨~ 커피 여기 있습니다.")

coffee = int(input("리사씨, 어떤 커피 드릴까요?(1:아메리카노, 2:카페라떼, 3:카푸치노, 4:에스프레소)"))
coffee_machine(coffee)
print("리사씨~ 커피 여기 있습니다.")

coffee = int(input("지수씨, 어떤 커피 드릴까요?(1:아메리카노, 2:카페라떼, 3:카푸치노, 4:에스프레소)"))
coffee_machine(coffee)
print("지수씨~ 커피 여기 있습니다.")

coffee = int(input("제니씨, 어떤 커피 드릴까요?(1:아메리카노, 2:카페라떼, 3:카푸치노, 4:에스프레소)"))
coffee_machine(coffee)
print("제니씨~ 커피 여기 있습니다.")

 

9-2 Code09-05.py에 다음 기능을 추가해 보자.

① 숫자1, 연산자, 숫자2 순서로 입력받는다.

② 제곱(**) 연산자를 추가한다.

③ 0으로 나누려고 하면 메시지를 출력하고 계산되지 않도록 한다.

 

힌트 메인 코드 부분에 if~else 문을 활용한다.

출력 결과
첫 번째 수를 입력하세요 : 2
계산을 입력하세요(+, -, *, /, **) : ** 
두 번째 수를 입력하세요 : 4
## 계산기 : 2 ** 4 = 16
출력 결과
첫 번째 수를 입력하세요 : 8
계산을 입력하세요(+, -, *, /, **) : /
두 번째 수를 입력하세요 : 0
0으로는 나누면 안 됩니다.ㅠㅠ

 

더보기

답 :

## 함수 선언 부분 ##
def calc(v1, v2, op) :
    result = 0
    if op == '+' :
        result = v1 + v2
    elif op == '-' :
        result = v1 + v2
    elif op == '*' :
        result = v1 * v2
    elif op == '/' :
        result = v1 / v2
    elif op == '**' :
        result = v1 ** v2

    return result

## 전역 변수 선언 부분 ##
res = 0
var1, var2, oper = 0, 0, ""

## 메인 코드 부분 ##
var1 = int(input("첫 번째 수를 입력하세요 : "))
oper = input("계산을 입력하세요(+, -, *, /, **) : ")
var2 = int(input("두 번째 수를 입력하세요 : "))

if var2 == 0 :
    print("0으로는 나누면 안 됩니다.ㅠㅠ")

res = calc(var1, var2, oper)

print("## 계산기 : %d %s %d = %d"%(var1, oper, var2, res))

 

9-3 Code09-11.py에서 2에서 10개까지 몇 개를 매개변수로 사용하든지 합계를 구하도록 para_func() 함수를 수정해 보자.

출력 결과
매개변수가 2개인 함수를 호출한 결과 ==> 30

매개변수가 10개인 함수를 호출한 결과 ==> 550

 

더보기

답 :

## 함수 선언 부분 ##
def para_func(v1, v2, v3 = 0, v4 = 0, v5 = 0, v6 = 0, v7 = 0, v8 = 0, v9 = 0, v10 = 0) :
    result = 0
    result = v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10
    return result

## 전역 변수 선언 부분 ##
hap = 0

## 메인 코드 부분 ##
hap = para_func(10, 20)
print("매개변수가 2개인 함수를 호출한 결과 ==> %d" % hap)
hap = para_func(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
print("매개변수가 10개인 함수를 호출한 결과 ==> %d" % hap)

 

연습문제

1. 다음 함수의 설명 중, 거리가 먼 것을 모두 고르세요.

① 함수는 뒤에 함수명( ) 처럼 뒤에 괄호 또는 함수명[ ] 처럼 뒤에 대괄호가 붙는다.

② print("값") 처럼 괄호 안에 데이터를 전달할 수 있다.

③ 파이썬은 자체 함수는 제공하지 않지만, 필요시 사용자가 직접 만들어서 사용할 수 있다.

④ 함수의 사용을 위해서 내부 작동을 꼭 알아야 할 필요는 없다. 함수에 전달하는 값과 어떤 작동만 하는지 정도만 알면 함수의 사용에는 문제가 없다.

 

더보기

답 : 1, 3

해설 : 1번 함수명[ ] 처럼 대괄호가 붙는 것은 리스트나 배열이다. 3번 파이썬은 자체 함수를 제공하고 있다.

 

2. 다음 빈칸에 들어갈 것을 쓰세요.

함수는 [      ①     ]를 입력받은 후에, 그 [     ①     ]를 가공해서 [      ②     ]을 돌려줍니다. 커피 자판기의 예를 들면 동전 및 버튼 입력이 [      ①     ]이고, 그 결과 나오는 커피가 [     ②     ]입니다.

 

더보기

답 : ① 매개변수     ② 반환값

 

3. 다음 코드에서 빈칸을 채우세요.

def plus(     ①     ) :
	result = 0
    result = v1 + v2 + v3
    [     ②     ]
    
   hap = plus(100, 200, 300)
   print(hap)

 

더보기

답 : ① v1, v2, v3     ② return result

 

4. 다음에서 출력되는 값을 예상해 보세요.

def f1() :
    print(var)

    
def f2() :
    var = 10
    print(var)

    
var = 100
f1()
f2()

 

더보기

답 : 100, 10

 

5. 함수의 반환값에 관련된 내용입니다. 거리가 먼 것을 모두 고르세요.

① 반환값은 반드시 1개 이상 있어야 한다.

② 반환값은 2개일 수도 있다.

③ 반환값이 2개일 경우, 두 반환값의 형식은 동일해야 한다.

④ 반환값이 3개일 경우, 내부적으로 리스트로 묶여서 반환된다.

⑤ 반환값의 개수와 매개변수의 개수는 연관이 없다.

 

더보기

답 : 1, 4

해설 : 1번 반환값을 가지지 않을 수도 있다. 4번 튜플이나 여러 개의 변수로 개별적으로 반환될 수 있다.

 

6. pass 예약어의 의미를 가장 잘 설명한 것을 고르세요.

① 동일한 내용을 반복한다는 의미이다.

② 이후의 코드를 모두 건너뛴다는 의미이다.

③ 그냥 아무것도 하지 않고 비워 놓을 때 사용한다.

④ if 문에서만 사용한다.

 

더보기

답 : 3

 

7. 함수의 매개변수와 관련된 설명입니다. 거리가 먼 것을 모두 고르세요.

① 매개변수는 1개 이상은 있어야 한다.

② 매개변수는 2개일 수도 있다.

③ 매개변수가 2개일 경우, 두 매개변수의 형식은 동일해야 한다.

④ 매개변수가 2개 이상일 경우, 반환값도 2개 이상이어야 한다.

매개변수는 이름만 다르면 개수가 많아도 상관없다.

 

더보기

답 : 1, 3, 4, 5

해설 : 1번 매개변수를 가지지 않을 수도 있다. 3번 매개변수는 각각 독립적으로 자신의 형식을 가질 수 있다. 4번 매개변수의 개수와 반환값의 개수는 연관 없다. 반환값이 없을 수도, 하나일 수도 있다. 5번 매개변수의 이름과 개수가 일치하지 않으면 오류가 발생한다.

 

8. 다음은 3개의 매개변수 중 기본값을 2개 설정하는 코드입니다. 빈칸을 채우세요.

*메일 문의 결과 기본값 2개가 아니라 3개가 맞다고 합니다.

실행 결과
매개변수 없이 호출 ==> 6
매개변수가 1개로 호출 ==> 6
매개변수가 2개로 호출 ==> 6
매개변수가 3개로 호출 ==> 6
def myFunc(     ):
    ret = p1 + p2 + p3
    return ret

print("매개변수 없이 호출 ==> ", myFunc())
print("매개변수가 1개로 호출 ==> ", myFunc(1))
print("매개변수가 2개로 호출 ==> ", myFunc(1, 2))
print("매개변수가 3개로 호출 ==> ", myFunc(1, 2, 3))

 

더보기

답 : p1 = 1, p2 = 2, p3 = 3

 

9. 다음은 모듈 및 패키지에 대한 설명입니다. 거리가 먼 것을 모두 고르세요.

① 모듈은 함수들의 집합으로 볼 수 있다.

② 파이썬은 자체 모듈을 제공하지 않지만, 필요하면 직접 모듈을 만들어서 사용할 수 있다.

③ mod.py 파일을 임포트하려면 import mod 문을 사용하면 된다.

④ 모듈 안의 함수를 호출할 때는 '모듈명[함수명]' 형식을 사용한다.

패키지는 모듈을 모아 놓은 것으로 파일의 형태로 제공된다.

⑥ 패키지는 주로 'from 패키지명. 모듈명 import 함수명'을 사용한다.

 

더보기

답 : 2, 4

해설 : 2번 파이썬은 자체 모듈을 제공하고 있다. 4번 모듈 안의 함수를 호출할 때는 '모듈명.함수명'형식을 사용한다.

 

10. 다음 코드는 오류가 발생합니다. 오류가 발생하는 행을 고르고, 그 이유를 간단히 설명하세요.

def func1(v1,v2) :
    def func2(num1, num2) :
        return num1 + num2
    return func2(v1, v2)

print(func1(100, 200))
print(func2(100, 200))

 

더보기

답 : 7행 print(func2(100, 200)), fuc2 함수가 내부에서 정의되었기 때문이다.

해설 : func2 함수는 func1함수의 지역 범위에만 존재한다. func2 함수를 사용하려면 func1 함수 내에서 호출하거나 전역으로 정의해야한다.

 

11. 1부터 100까지의 합계(=5050)을 구하는 재귀 함수를 사용한 코드입니다. 재귀 함수의 빈칸을 완성하세요.

def addNumber(num) :
    
    
    
    
print(addNumber(100))

 

더보기

답 :

if num <= 1 :
    return num
else :
    return num + addNumber(num-1)

 

12. 재귀 호출 함수를 이용해서 입력한 10진수를 2진수/8진수/16진수로 변환하는 코드를 작성하세요. 재귀 호출 함수는 2진수로 변환하는 base2(숫자), 8진수로 변환하는 base8(숫자), 16진수로 변환하는 base16(숫자) 등 3개 함수를 작성하세요.

실행 결과
10 진수 입력 -->

2진수 : 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
8진수 : 7 7 7 7 7
16진수 : 7 F F F

 

더보기

답 :

def base2(num):
    if num == 0:
        return ''
    else:
        return base2(num // 2) + str(num % 2)

def base8(num):
    if num == 0:
        return ''
    else:
        return base8(num // 8) + str(num % 8)

def base16(num):
    hex_chars = "0123456789ABCDEF"
    if num == 0:
        return ''
    else:
        return base16(num // 16) + hex_chars[num % 16]

dec = int(input("10진수 입력 --> "))

bin = base2(dec)
oct = base8(dec)
hex = base16(dec)

print("2진수: ", bin)
print("8진수: ", oct)
print("16진수: ", hex)

 

 

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

 

import turtle
import random

## 전역 변수 선언 부분 ##
myTurtle, tX, tY, tColor, tSize, tShape = [None] * 6
shapeList = []
playerTurtles = [] # 거북이 2차원 리스트
swidth, sheight = 500, 500

## 메인 코드 부분 ##
if __name__ == "__main__" :
    turtle.title('거북이 리스트 활용')
    turtle.setup(width = swidth + 50, height = sheight + 50)
    turtle.screensize(swidth, sheight)

    shapeList = turtle.getshapes()
    for i in range(0, 100) :
        random.shuffle(shapeList)
        myTurtle = turtle.Turtle(shapeList[0])
        tX = random.randrange(-swidth / 2, swidth / 2)
        tY = random.randrange(-sheight / 2, sheight / 2)
        r = random.random(); g = random.random(); b = random.random()
        tSize = random.randrange(1, 3)
        playerTurtles.append([myTurtle, tX, tY, tSize, r, g, b])

    for tList in playerTurtles :
        myTurtle = tList[0]
        myTurtle.color((tList[4], tList[5], tList[6]))
        myTurtle.pencolor((tList[4], tList[5], tList[6]))
        myTurtle.turtlesize((tList[3]))
        myTurtle.goto((tList[1], tList[2]))
    turtle.done()

 

 

DeprecationWarning: non-integer arguments to randrange() have been deprecated since Python 3.10 and will be removed in a subsequent version

 

아마 파이썬 3.10 버전 이상을 쓰는 사람이라면 이런 오류가 뜨며 실행되지 않았을 것이다.

찾아보니 Python 3.10에서 randrange() 함수에 정수가 아닌 인수를 전달하는 것을 더 이상 허용하지 않으며, 향후 Python 버전에서 제거될 예정이라고 한다. 즉, 위 코드에서 실수형 값을 반환하고 있기 때문에 정수형으로 전환해주어야 한다는 뜻이다.

 

그래서 20, 21행 코드를 아래와 같이 수정해야한다.

tX = random.randrange(-swidth // 2, swidth // 2)
tY = random.randrange(-sheight // 2, sheight // 2)

 

 

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()

 

 

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

Self Study

5-1 Code05-08.py를 다음 조건처럼 좀 더 세분화해 보자.

95점 이상 : A+, 90점 이상 : A0, 85점 이상 : B+, 80점 이상 : B0,

75점 이상 : C+, 70점 이상 : C0, 65점 이상 : D+, 60점 이상 : D0, 60점 미만 : F

 

더보기

답 :

score = int(input("점수를 입력하세요 : ")) if score >= 95 : print("A+") elif score >= 90 : print("A") elif score >= 85 : print("B+") elif score >= 80 : print("B") elif score >= 70 : print("C+") elif score >= 75 : print("C") elif score >= 65 : print("D+") elif score >= 60 : print("D") else : print("F") print("학점입니다. ^^")

 

 

5-2 [프로그램 2]의 두 번째 기능처럼 두 숫자를 입력받고 두 숫자 사이의 합계를 구하는 프로그램을 만들어 보자. 단 1씩 증가하지 않고 증가하는 숫자도 입력받는다. 예를 들어 1, 100, 3을 입력하면 1+4+...+100의 합계를 구한다.

힌트1 range(시작값, 끝값+1, 증가값) 형식으로 사용한다.

 

더보기

답 :

## 변수 선언 부분 ##
select, answer, num1, num2, num3 = 0, 0, 0, 0, 0

## 메인 코드 부분 ##
num1 = int(input("*** 첫 번째 숫자를 입력하세요 : "))
num2 = int(input("*** 두 번째 숫자를 입력하세요 : "))
num3 = int(input("*** 더할 숫자를 입력하세요 : "))
for i in range(num1, num2 + 1, num3) :
    answer = answer + i
print("%d+%d+...+%d는 %d입니다." % (num1, num1+num3, num2, answer))

 

5-3 숫자를 하나 입력받고, 그 숫자가 소수인지를 체크하는 프로그램을 만들어 보자.

힌트 소수란 2부터 자기자신-1까지의 숫자로 나눠서 나누어 떨어지는 숫자가 하나도 없는 수를 말한다. 예를 들어 7의 경우 2, 3, 4, 5, 6으로 각각 나누어서 나누어 떨어지는 수가 하나도 없으므로 소수다.

 

더보기

답 :

## 변수 선언 부분 ##
num1 = 0

## 메인 코드 부분 ##
num1 = int(input("*** 숫자를 입력하세요 : "))
for i in range(2, num1) :
    if num1 % i == 0 :
        print("%d는 소수가 아닙니다." %num1)
        break
else :
    print("%d는 소수 입니다." %num1)

 

연습문제

1. 다음은 num이 100인 경우에 실행하는 if 문입니다. 문법이 옳은 코드를 고르세요.

① if num = 100 :

② if num is 100 :

③ if num equal 100 :

④ if num == 100 :

⑤ if num != 100 :

 

더보기

답 : 4, 5

해설 : if 문에는 관계 연산자가 들어가야한다.

 

2. 다음 코드가 출력하는 것을 고르세요.

num = 0
if num > 0 :
	print("케이스1", end = ' ')
else :
	print("케이스2", end = ' ')
print("케이스3", end = ' ')

① 케이스1

② 케이스2

③ 케이스3

④ 케이스1 케이스2

⑤ 케이스2 케이스3

⑥ 케이스1 케이스3

 

더보기

답 : 5

 

3. 다음은 입력한 수가 5의 배수인지 체크하는 코드입니다. 빈칸을 채우세요.

num = int(input("정수를 입력하세요 : "))

if [          ] :
	print("5의 배수가 아닙니다.")
else :
	print("5의 배수입니다.")

 

더보기

답 : num % 5 != 0

 

4. 다음은 장학생, 합격, 불합격으로 구분하는 중첩 if 문입니다. 이를 if ~elif 문으로 변경하세요.

score = int(input("점수를 입력하세요 : "))

if score >= 90 :
	print("장학생", end = ' ')
else :
	if score >= 60 :
    	print("합격", end = ' ')
    else :
    	print("불합격", end = ' ')
        
print("입니다. ^^")

 

더보기

답 :

score = int(input("점수를 입력하세요 : "))

if score >= 90 :
	print("장학생", end = ' ')
elif score >= 60 :
	print("합격", end = ' ')
else : 
	print("불합격", end = ' ')
        
print("입니다. ^^")

 

5. 다음 코드의 2~5행을 삼항 연산자로 변경한 것으로 옳은 것을 고르세요.

num = 5
if num % 2 == 0 :
	res = '짝수'
else :
	res = '홀수'
print(res)

① res = '홀수' if num % 2 == 0 else '짝수'

② res = if num % 2 == 0 '짝수' else '홀수'

③ res = '짝수' if num % 2 == 0 else '홀수'

④ res = if num % 2 == 0 '홀수' else '짝수'

 

더보기

답 : 3

 

6. 랜덤하게 1~20까지의 숫자를 20개 채운 후에, 뽑힌 숫자 목록을 추출하는 코드를 작성하세요.

실행 결과
생성된 리스트 [1, 17, 8, 13, 8, 19, 13, 1 11, 17, 11, 11, 4, 4, 4, 17, 17, 1, 4, 9]
숫자 1은(는) 뽑혔습니다.
숫자 4은(는) 뽑혔습니다.
숫자 8은(는) 뽑혔습니다.
숫자 9은(는) 뽑혔습니다.
숫자 11은(는) 뽑혔습니다.
숫자 13은(는) 뽑혔습니다.
숫자 17은(는) 뽑혔습니다.
숫자 19은(는) 뽑혔습니다.

 

더보기

답 :

import random

numbers = []
for num in range(0,21) :
    numbers.append(random.randrange(0,21))

print("생성된 리스트", numbers)

for num in numbers :
    print("숫자 %d는(은) 뽑혔습니다." %num)

 

7. 다음은 두 사람이 주사위를 던져서 높은 숫자가 나오면 이기는 게임입니다. 출력 결과는 A가 이기거나, B가 이기거나, 비기는 결과가 나와야 합니다. 코드를 작성하세요.

 

더보기

답 :

아래의 첫 번째 코드는 파이썬 내장함수인 sum을 이용한 코드입니다. 내장함수를 사용하지 않은 코드(두 번째)도 첨부하였습니다.

import random

## 전역 변수 선언 부분 ##
diceA, diceB = [], []

## 메인 코드 부분 ##

for A in range(2):
    diceA.append(random.randrange(1, 7))
    
print("A의 주사위 숫자는 %s입니다." % diceA)

for B in range(2):
    diceB.append(random.randrange(1, 7))
    
print("B의 주사위 숫자는 %s입니다." % diceB)

if sum(diceA) > sum(diceB):
    print("A가 이겼네요.")
elif sum(diceA) < sum(diceB):
    print("B가 이겼네요.")
else:
    print("둘이 비겼네요.")

 

import random

## 전역 변수 선언 부분 ##
diceA1, diceA2, diceB1, diceB2 = 0, 0, 0, 0

## 메인 코드 부분 ##

diceA1 = random.randrange(1, 7)
diceA2 = random.randrange(1, 7)
print("A의 주사위 숫자는 %d %d입니다." % (diceA1, diceA2))
diceB1 = random.randrange(1, 7)
diceB2 = random.randrange(1, 7)
print("B의 주사위 숫자는 %d %d입니다." % (diceB1, diceB2))

if diceA1 + diceA2 > diceB1 + diceB2 :
    print("A가 이겼네요.")
elif diceA1 + diceA2 < diceB1 + diceB2 :
    print("B가 이겼네요.")
else:
    print("둘이 비겼네요.")

 

8. [응용예제 02]를 변경해서 거북이 3마리를 생성한 후 화면을 돌아다닐 때, 서로 만나면 크기가 랜덤하게 변경된 후, 계속 움직이는 프로그램을 작성합니다. 즉, 무한루프로 반복됩니다. 만약, 화면 밖으로 나가면 중앙(0, 0) 위치로 다시 데려옵니다.

힌트1 거북이의 크기는 1~9 값을 랜덤하게 추출한다.

힌트2 거북이의 속도를 올리려면 turtle.speed(10)을 사용하면 된다.

 

더보기

답 :

import turtle
import math
import random

## 전역 변수 선언 ##
t1, t2, t3 = [None] * 3
t1X, t1Y, t2X, t2Y, t3X, t3Y = [0] * 6
swidth, sheight, exitcount = 300, 300, 0 

## 메인 코드 부분 ##
if __name__ == "__main__" :
    turtle.title('거북이 만나기')
    turtle.setup(width = swidth + 50, height = sheight + 50)
    turtle.screensize(swidth, sheight)

    t1 = turtle.Turtle('turtle'); t1.color('red'); t1.penup()
    t2 = turtle.Turtle('turtle'); t2.color('green'); t2.penup()
    t3 = turtle.Turtle('turtle'); t3.color('blue'); t3.penup()

    t1.goto(-100, -100); t2.goto(0, 0); t3.goto(100, 100)
    t1.speed(10); t2.speed(10); t3.speed(10);
    
    while True :
        angle = random.randrange(0, 360)
        dist = random.randrange(1, 50)
        t1.left(angle); t1.forward(dist)
        angle = random.randrange(0, 360)
        dist = random.randrange(1, 50)
        t2.left(angle); t2.forward(dist)
        angle = random.randrange(0, 360)
        dist = random.randrange(1, 50)
        t3.left(angle); t3.forward(dist)

        t1X = t1.xcor(); t1Y = t1.ycor()
        t2X = t2.xcor(); t2Y = t2.ycor()
        t3X = t3.xcor(); t3Y = t3.ycor()

        if (-swidth / 2 <= t1X and t1X <= swidth / 2) and (-sheight / 2 <= t1Y and t1Y <= sheight / 2) and \
            (-swidth / 2 <= t2X and t2X <= swidth / 2) and (-sheight / 2 <= t2Y and t2Y <= sheight / 2) and \
            (-swidth / 2 <= t3X and t3X <= swidth / 2) and (-sheight / 2 <= t3Y and t3Y <= sheight / 2) :
            pass
        
        else :
            t1.penup(); t1.goto(0, 0)
            t2.penup(); t2.goto(0, 0)
            t3.penup(); t3.goto(0, 0)

        if math.sqrt(((t1X - t2X) * (t1X - t2X)) + ((t1Y - t2Y) * (t1Y -t2Y))) <= 20 or \
           math.sqrt(((t1X - t3X) * (t1X - t3X)) + ((t1Y - t3Y) * (t1Y -t3Y))) <= 20 or \
           math.sqrt(((t2X - t3X) * (t2X - t3X)) + ((t2Y - t3Y) * (t2Y -t3Y))) <= 20 :
            t1.turtlesize(random.randrange(1, 10)); t2.turtlesize(random.randrange(1, 10)); t3.turtlesize(random.randrange(1, 10))

    turtle.done()

 

 

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

+ Recent posts