Self Study

4-1 돈(예로 777777)을 입력하면 50000원, 10000원, 5000원, 1000원 지폐로 교환하는 프로그램을 작성해 보자.

 

더보기

답 :

## 변수 선언 부분 ##
money, c50000, c10000, c5000, c1000 = 0, 0, 0, 0, 0

## 메인 코드 부분 ##
money = int(input("지폐로 교환할 돈은 얼마? "))

c50000 = money // 50000
money %= 50000

c10000 = money // 10000
money %= 10000

c5000 = money // 5000
money %= 5000

c1000 = money // 1000
money %= 1000

print("\n 50000원짜리 ==> %d장"%c50000)
print("10000원짜리 ==> %d장"%c10000)
print("5000원짜리 ==> %d장"%c5000)
print("1000원짜리 ==> %d장"%c1000)
print("바꾸지 못한 잔돈 ==> %d원 \n"%money)

 

4-2 시프트할 숫자와 출력할 횟수를 입력받는 프로그램을 작성해 보자.

 

더보기

답 :

a=int(input("시프트 할 숫자는? "))
b=int(input("출력 할 횟수는? "))
result = 0
i = 0

for i in range(1, b+1) :
    result = a << i
    print("%d << %d = %d" % (a, i, result))

for i in range(1, b+1) :
    result = a >> i
    print("%d << %d = %d" % (a, i, result))

 

연습문제

1. 다음 각 산술 연산자 중 설명에 맞는 연산자를 보기에서 고르세요.

= + - * ^ ~ / // % ** *** & # $ @ ? ==

(1) 대입 연산자

(2) 나누기(몫)

(3) 나머지 값

(4) 제곱

 

더보기

답 : (1) =     (2) //     (3) %     (4) **

 

2. 다음과 같이 값이 들어 있을 때, 각 문항의 계산 결과를 쓰세요.

n1, n2, n3 = 1, 2, 3

(1) n1 + n2 * n3

(2) n1 * n2 + n3

(3) n1 - n2 * n3

(4) n1 * n2 - n3

 

더보기

답 : (1) 7     (2) 5     (3) -5     (4) -1

 

3. 다음 각 빈칸에 들어갈 함수의 이름을 쓰세요.

문자열을 정수로 변환하는 함수는 [     ①     ]( ), 실수로 변환하는 함수는 [     ②     ]( ) 입니다. 반대로 숫자를 문자열로 변경하는 함수는 [     ③     ]( ) 입니다.

 

더보기

답 : ① int     ② float     ③ str

 

4. 다음 코드를 실행한 후 출력되는 결과를 쓰세요.

num = 100
num += 1
num -= 1
num *= 1
num /= 1
num = int(num)
print(num)

 

더보기

답 : 100

 

5. 다음 각 관계 연산자의 결과를 True 또는 False로 선택하세요.

num1, num2 = -100, 100

(1) num1 == num2

(2) num1 >= num2

(3) num1 <= num2

(4) num != num2

 

더보기

답 : (1) Fasle    (2) False    (3) True    (4) True

 

6. 다음 각 논리 연산자의 결과를 True 또는 False로 선택하세요.

num1, num2 = -100, 100

(1) (num1 == num2) and (num1 != num2)

(2) (num1 == num2) or (num1 != num2)

(3) (num1 >= num2) and (num1 <= num2)

(4) (num1 >= num2) or (num1 <= num2)

 

더보기

답 : (1) Fasle    (2) False    (3) True    (4) True

 

7. 다음 각 비트 연산자의 결과를 쓰세요.

num1, num2 = 6, 1

(1) num1 & num2

(2) num1 | num2

(3) num1 >> num2

(4) num1 << num2

 

더보기

답 : (1) 0     (2) 7     (3) 3     (4) 12

 

8. 다음 각 비트 연산자의 결과를 쓰세요.

& () == and << >= +

 

더보기

답 : (), +, <<, &, >=, ==, and

 

9. 500원, 100원, 50원, 10원의 동전의 개수를 입력했을 때, 총 합계를 출력하는 코드를 작성하세요.

실행 결과
500원짜리 개수 --> 7
100원짜리 개수 --> 13
50원짜리 개수 --> 9
10원짜리 개수 --> 2
## 동전의 합계 ==> 5270원

 

더보기

답 :

## 변수 선언 부분 ##
a, b, c, d, c500, c100, c50, c10 = 0, 0, 0, 0, 0, 0, 0, 0

## 메인 코드 부분 ##
a = int(input("\n500원짜리 개수 ==> "))
b = int(input("100원짜리 개수 ==> "))
c = int(input("50원짜리 개수 ==> "))
d = int(input("10원짜리 개수 ==> "))

c500 = a * 500

c100 = b * 100

c50 = c * 50

c10 = d * 10


print("## 동전의 합계 ==> ", c500 + c100 + c50 + c10, "원")

 

10. [응용예제 02]를 활용해서 비트 논리곱을 구현합니다. 2진수 2개를 입력받아서 각 숫자에 대한 2진수와 비트 논리합(|)의 결과 2진수를 출력하는 프로그램을 작성하세요. 예로 1111011과 111001000을 입력하면 1111011 | 111001000의 결과 11111101이 차례로 출력된 결과는 다음과 같습니다.

실행 결과
2진수를 입력하세요 : 1111011
2진수를 입력하세요 : 111001000

 

더보기

답 :

아래의 첫 번째 코드는 def 함수를 이용하여 중복을 제거한 코드입니다. 그러나 현재 교재 과정에서는 아직 함수를 배우지 않았기 때문에 def 함수를 쓰지 않은 코드(두 번째)도 첨부하였습니다.

import turtle

num1, num2, result = 0, 0, 0
swidth, sheight = 1000, 300
curX, curY = 0, 0

def binary(Bin,num):
    curX = swidth / 2
    for i in range(len(Bin) - 2):
        turtle.goto(curX, curY)
        if num & 1 :
            turtle.color('red')
            turtle.turtlesize(2)
        else :
            turtle.color('blue')
            turtle.turtlesize(1)
        turtle.stamp()
        curX -= 50
        num >>= 1
        
if __name__ == "__main__" :
    turtle.title('거북이로 두 숫자 비트 논리합(|) 연산하기')
    turtle.shape('turtle')
    turtle.setup(width = swidth + 50, height = sheight + 50)
    turtle.screensize(swidth, sheight)
    turtle.penup()
    turtle.left(90)

    num1 = int(input("2진수를 입력하세요 : "), 2)
    num2 = int(input("2진수를 입력하세요 : "), 2)
    binary1 = bin(num1)
    binary2 = bin(num2)
    result = num1 | num2

    curY = 50
    binary(bin(num1),num1)
    curY = 0
    binary(bin(num2),num2)
    curY = -50
    binary(bin(result),result)
    
turtle.done()

 

import turtle

## 전역 변수 부분 ##
num1, num2, result = 0, 0, 0
swidth, sheight = 1000, 300
curX, curY = 0, 0

## 메인 코드 부분 ##
if __name__ == "__main__" :
    turtle.title('거북이로 2진수 표현하기')
    turtle.shape('turtle')
    turtle.setup(width = swidth + 50, height = sheight + 50)
    turtle.screensize(swidth, sheight)
    turtle.penup()
    turtle.left(90)
    
    num1 = int(input("숫자를 입력하세요 : "), 2)
    num2 = int(input("숫자를 입력하세요 : "), 2)
    binary1 = bin(num1)
    binary2 = bin(num2)
    result = num1 | num2
    binary3 = bin(result)
    curX = swidth / 2
    curY = 0
    
    for i in range(len(binary1) - 2):
        turtle.goto(curX, curY)
        if num1 & 1 :
            turtle.color('red')
            turtle.turtlesize(2)
        else:
            turtle.color('blue')
            turtle.turtlesize(1)
        turtle.stamp()
        curX -= 50
        num1 >>= 1

    curX = swidth / 2
    curY = -50
    
    for i in range(len(binary2) - 2):
        turtle.goto(curX, curY)
        if num2 & 1 :
            turtle.color('red')
            turtle.turtlesize(2)
        else:
            turtle.color('blue')
            turtle.turtlesize(1)
        turtle.stamp()
        curX -= 50
        num2 >>= 1

    curX = swidth / 2
    curY = -100
    
    for i in range(len(binary3) - 2):
        turtle.goto(curX, curY)
        if result & 1 :
            turtle.color('red')
            turtle.turtlesize(2)
        else:
            turtle.color('blue')
            turtle.turtlesize(1)
        turtle.stamp()
        curX -= 50
        result >>= 1

turtle.done()

 

 

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

Self Study

3-1 print() 함수를 이용하여 별표가 출력되도록 프로그램을 작성해 보자.

 

더보기

답 : 

print("***********")
print(" ********* ")
print("  *******  ")
print("   *****   ")
print("    ***    ")
print("     *     ")
print("    ***    ")
print("   *****   ")
print("  *******  ")
print(" ********* ")
print("***********")

 

 

3-2 Code03-04.py는 16, 10, 8, 2 이외의 숫자를 입력하면 오류가 발생한다. 코드를 수정해서 16, 10, 8, 2 외의 숫자를 입력하면 '16, 10, 8, 2 숫자 중 하나만 입력하세요.'라는 메시지를 출력하고 프로그램을 종료하도록 if 문을 추가해 보자.

힌트1 같지 않다는 !=로 비교한다.

힌트2 여러 조건이 동시에 참이어야 하는 관계 연산자는 and이다.

 

더보기

답 :

sel = int(input("입력 진수 결정(16/10/8/2) : "))

if sel == 16 :
    num = input("값 입력 : ")
    num10 = int(num, 16)
if sel == 10 :
    num = input("값 입력 : ")
    num10 = int(num, 10)
if sel == 8 :
    num = input("값 입력 : ")
    num10 = int(num, 8)
if sel == 2 :
    num = input("값 입력 : ")
    num10 = int(num, 2)
if sel != 16 and 10 and 8 and 2 :
    print("16, 10, 8, 2 숫자 중 하나만 입력하세요.")
    exit()


print("16진수 ==> ", hex(num10))
print("10진수 ==> ", (num10))
print("8진수 ==> ", oct(num10))
print("2진수 ==> ", bin(num10))

 

연습문제

1. 다음 각 보기를 실행하여 다른 값이 출력하는 것을 하나 고르세요.

 

① print("100")     ② print(100)     ③print(50+50)     ④print("50+50")

 

더보기

답 : 4

 

해설 : 다른 것들은 100이 출력되지만 4번은 문자열을 그대로 출력하기 때문에 50+50이 출력된다.

 

2. 다음 코드의 실행 결과를 고르세요.

print('%d / %d = %d' % (5, 10, 5/10))

① 5 / 10 = 0.5     ② 5 / 10 = 0.50000     ③ 5 / 10 = 0     ④ 5 / 10 = 0.00000

 

더보기

답 : 3

 

해설 : %d는 정수로 표시하기 때문에 5/10을 0로 출력한다.

 

3. 다음 코드의 실행 결과를 예상해 보세요.

 

(1) print("%04d" % 876)

(2) print("%5s" % "CookBook")

(3) print("%1.1f" % 123.45)

 

더보기

답 : (1) 0876    (2) CookBook    (3) 123.5

 

4. 다음 코드의 실행 결과를 고르세요.

print("{2:d} {0:d} {1:d}".format(111, 222, 333))

① 111 222 333    ② 333 222 111    ③ 333 111 222     ④ 222 333 111

 

더보기

답 : 3

 

5. 다음 보기 중에서 설명하는 이스케이프 문자를 각각 고르세요.

\n \t \b \\ \' \"

(1) 다음 탭으로 이동

(2) 뒤로 한 칸 이동

(3) \를 출력

 

더보기

답 : (1) \t    (2) \b    (3) \\

 

6. 파이썬에서 제공되는 데이터 형식입니다. 거리가 먼 것을 하나 고르세요.

 

① 불 : bool    ② 정수 : int    ③ 실수 : float    ④ 문자 : character    ⑤ 문자열 : str

 

더보기

답 : 4

 

7. 다음 코드 중에서 오류가 발생하는 것을 모두 고르세요.

 

① num1 = 100

② 100 = num1

③ num1 = num2 = 100

④ num1 = 100 = num2 = 100

⑤ num1 = num2 = num3 = 100

 

더보기

답 : 2, 4

 

8. 코드를 실행하면 오류가 발생합니다. 그 이유를 설명하세요.

a = b = 10 = c = d = 20

 

더보기

답 : 변수는 오른쪽에서 왼쪽으로 대입된다. 값을 할당할 변수는 왼쪽, 값은 오른쪽에 써야하기 때문이다.

 

9. 다음 10진수, 2진수, 16진수의 조합 중 틀린 것을 모두 고르세요.

 

① 0, 0000, 0     ② 2, 0011, 2    ③ 7, 0111, 7    ④ 11, 1001, C    ⑤ 16, 1111, F

 

더보기

답 : 2, 4, 5

해설 : 2번의 2진수 0011은 10진수 3이다. 4번의 2진수 1001과 16진수 C는 각각 10진수 9, 12이다. 5번의 2진수 1111과 16진수 F는 10진수 15이다.

 

10. 각 진수를 10진수로 변환하세요.

 

(1) 2진수 0011

(2) 2진수 01010

(3) 16진수 11

(4) 8진수 17

 

더보기

답 : (1) 3     (2) 10     (3) 17     (4) 15

 

11. 다음 각 진수를 모두 10진수로 변환하세요.

 

(1) 1011(2진수)

(2) 1A(16진수)

 

더보기

답 : (1) 11     (2) 26

 

12. 다음 빈칸에 들어갈 함수 이름을 쓰세요.

[     ①     ](숫자) 함수는 숫자를 16진수로, [     ②     ](숫자) 함수는 숫자를 8진수로, [     ③     ](숫자) 함수는 숫자를 2진수로 출력합니다.

 

더보기

답 : ① hex     ② oct     ③ bin

 

13. 오류가 발생하는 것을 모두 고르고, 그 이유를 간단히 설명하세요.

 

① int('1002', 2)

② int('1008', 8)

③ int('AAFG', 16)

 

더보기

답 : 2, 3

해설 : 2번 8진수는 0부터 8까지의 숫자만 사용할 수 있기 때문에 오류가 발생한다. 3번 16진수는 0부터 9까지의 숫자와 A부터 F까지의 문자로 이루어져 있는데 G는 16진수가 아니기 때문에 오류가 발생한다.

 

14. 다음은 데이터 형에 대한 설명입니다. 설명이 올바르지 않은 것을 모두 고르세요.

 

① 정수형은 <class 'int'>로 표현된다.

② 정수형은 크기가 무제한이다.

③ 불형은 True, False, Null 세 값 중 하나가 저장된다.

④ 실수형은 소수점이 있다.

⑤ 문자는 작은따옴표, 문자열은 큰따옴표로 지정한다.

 

더보기

답 : 3, 5

해설 : 3번 불형은 True와 False만 저장할 수 있다. 5번 파이썬은 작은따옴표, 큰따옴표 둘 중 아무것이나 사용해도 된다.

 

15. 다음과 같은 결과가 나오도록 코드의 빈 곳을 채우세요.

실행 결과
10진수 ==> 12345678
16진수 ==> 0xbc614e
  8진수 ==> 0o57060516
  2진수 ==> 0b101111000110000101001110
num= 12345678
[          ]
print("10진수 ==> ", num)
print("16진수 ==> ", hex_num)
print("  8진수 ==> ", oct_num)
print("  2진수 ==> ", bin_num)

 

더보기

답 :

hex_num = hex(num)
oct_num = oct(num)
bin_num = bin(num)

 

16. 글자 하나를 입력하면 2, 8, 10, 16진수인지 아닌지를 구분하는 코드를 작성해 보세요.

힌트1 if ~ elif ~ else 문을 사용하세요(5장에서 다룹니다)

힌트2 2진수는 0~1, 8진수는 0~7, 10진수는 0~9, 16진수는 0~F 까지의 범위입니다.

 

더보기

답 :

num = input("글자 입력 : ")

if '0' <= num <= '1' :
    print("2진수 또는 8진수 또는 10진수 또는 16진수 입니다.")
elif '0' <= num <= '7' :
    print("8진수 또는 10진수 또는 16진수 입니다.")
elif '0' <= num <= '9' :
    print("10진수 또는 16진수 입니다.")
elif '0' <= num <= '9' or 'A' <= num <='F' or 'a' <= num <='f' :
    print("16진수 입니다.")
else :
    print("숫자가 아닙니다.")

 

 

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

 

Self Study

2-1 터틀 그래픽 프로그램을 수정해서 마우스 왼쪽 버튼과 마우스 가운데 버튼의 기능을 통합해 보자. 즉 마우스 왼쪽 버튼만 눌러도 임의의 색상이 지정되고 거북이의 크기가 변경되면서 선이 그려지도록 하자.

더보기

답 :

import turtle
import random

## 함수 선언 부분 ##
def screenLeftClick(x, y):
    global r, g, b
    turtle.pencolor((r, g, b))
    turtle.pendown()
    turtle.goto(x, y)
    tSize = random.randrange(1, 10)
    turtle.shapesize(tSize)
    r = random.random()
    g = random.random()
    b = random.random()
    
def screenRightClick(x, y):
    turtle.penup()
    turtle.goto(x, y)
    
## 변수 선언부분 ##
pSize = 10
r, g, b = 0.0, 0.0, 0.0

## 메인 코드 부분 ##
turtle.title('거북이로 그림 그리기')
turtle.shape('turtle')
turtle.pensize(pSize)

turtle.onscreenclick(screenLeftClick, 1)
turtle.onscreenclick(screenRightClick, 3)

turtle.done()

 

연습문제

1. 다음은 변수에 대한 설명입니다. 거리가 먼 것을 하나 고르세요.

더보기

답 : 4

 

2. n1과 n2 변수를 더해서 n3에 넣으라는 의미의 코드를 고르세요.

더보기

답 : 3

 

3. 다음 코드가 출력하는 결과를 고르세요.

n1 = 10
n2 = 5
res = n1 - n2
print(n1, '-', n2, '=', res)
더보기

답 : 2

 

4. 파이썬 IDLE을 종료하는 함수를 고르세요.

더보기

답 : 4

 

5. 다음 코드를 실행하면 출력되는 결과를 쓰세요.

더보기

답 : 10 * 5 = 50

 

6. 다음 코드는 두 수를 입력받고 계산하는 코드이지만 실행 오류가 발생합니다. 정상적으로 실행되도록 3행을 수정하세요.

n1 = input("숫자1-->")
n2 = input("숫자2-->")
res = n1 = n2
print(n1, "+", n2, "=", res)

실행 결과

숫자1-->100

숫자2-->50

100 + 50 = 150

 

더보기

답 :

n1 = input("숫자1-->")
n2 = input("숫자2-->")
res = int(n1) + int(n2)
print(n1, "+", n2, "=", res)

 

7. 정수 3개를 입력받은 후에 세 숫자의 덧셈 및 곱셈을 출력하는 코드를 작성하세요.

더보기

답 :

a=int(input("숫자1 입력: "))
b=int(input("숫자2 입력: "))
c=int(input("숫자3 입력: "))
result=a+b+c
print(a, "+", b, "+", c, "=", result)
result=a*b*c
print(a, "*", b, "*", c, "=", result)

 

8. 화면에 마우스 오른쪽 버튼을 클릭하면 거북이가 마우스를 클릭한 위치까지 랜덤한 색상으로 선을 그리면서 이동한 후, 랜덤한 크기, 각도의 거북이 도장이 찍히는 프로그램을 작성하세요.

힌트1 거북 색상은 turtle.color(r, g, b)로 설정한다.

힌트2 거북 도장은 turtle.stamp()를 사용한다.

더보기

답 :

import turtle
import random

## 함수 선언 부분 ##
def screenRightClick(x, y):
    global r, g, b
    turtle.color(r, g, b)
    turtle.stamp()
    turtle.pencolor((r, g, b))
    turtle.pendown()
    turtle.goto(x, y)
    tangle = random.randrange(1, 360)
    tSize = random.randrange(1, 10)
    turtle.shapesize(tSize)
    r = random.random()
    g = random.random()
    b = random.random()
  
## 변수 선언부분 ##
pSize = 10
r, g, b = 0.0, 0.0, 0.0

## 메인 코드 부분 ##
turtle.title('거북이로 그림 그리기')
turtle.shape('turtle')
turtle.pensize(pSize)

turtle.onscreenclick(screenRightClick, 3)

turtle.done()

 

 

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

 

+ Recent posts