티스토리 뷰

728x90
반응형

Chapter 04 연습문제 풀이

 

1. 산술 연산자가 아닌 것을 모두 고르시오

+ - * ^ ~ / // % ** & *** ?

★ ^(배타적 논리합), ~(부정), &(논리곱) 은 비트 연산자다.

★ ***와 ?는 연산자가 아니다.

 

 

2. 다음  계산식의 결과를 예측하시오.

a, b = 10, 20

★ 변수 a와 b에 각각 10과 20을 대입하기 때문에 a = 10; b =20(int 형)이 수행된다.

⓵ a + b

    > 30

 a - b

★    >-10

 a % b

★    >10 ( %는 나머지를 반환해 주는 연산)

 a // b

★    >0 (//는 몫을 반환해 주는 연산)

 

 

3. 다음  계산식의 결과를 예측하시오.

a, b, c = 1, 2, 3

★ 위와 마찬가지로 변수 a, b, c에 각각 1, 2, 3을 대입한다.

⓵ a + b % c

    > 3 (연산자 우선순위에 의해 뒤의 %연산이 먼저 수행된다.)

 a * b - c

★    >-1 (역시 *의 우선순위가 높으므로  a * b가 먼저 수행된다.)

 a / b * c

★    >1.5 ( /와 *는 우선순위가 같으므로 왼쪽에 있는 순서대로 수행된다. 따라서 a/b부터 연산한다.)

## 파이썬에서는 정수형끼리 연산을 할 때, 결과가 실수형이면 타입을 실수형으로 바꿔준다.

예를 들어 위의 a(1) / b(2) 연산은 int 타입끼리의 연산이므로 0.5에서 .5가 없어진 0이 결과 값으로 반환하는 것이 아닌 float형으로 바꿔 0.5를 반환한다. 

 

 

4. 문자열을 숫자로 변환한 후 계산하는 식이다. 오류가 발생하는 것을 고르고, 오류가 발생하지 않도록 수정하시오.

s1, s2, s3 = "111", "111.11", "999999999999999"

⓵ int(s1) + 111.11

 int(s2) + 111.11

★    >ValueError: invalid literal for int() with base 10: '111.11'

111.11은 float 타입이기 때문에 int 타입으로 형변환을 하려 하면 위와 같은 에러가 발생한다. 따라서 int()가 아닌 float()을 호출해야 한다.

 int(s3) + 111.11

 

 

5. 대입 연산자의 활용이다. 결과를 예측하시오.

⓵ a, b = 10, 20; a += b; print(a)

★  a = a + b와 같으므로 30이 출력된다.

 a, b= 10, 20; a %= b; print(a)

★  a = a % b와 같으므로 10이 출력된다.

 a, b= 10, 20; a //= b; print(a)

★  a = a // b와 같으므로 0이 출력된다.

 

 

6. 논리 연산자가 아닌 것을 모두 고르시오.

① and

② or

③ not

④ nor   

⑤ xor   

⑥ equal   

 

 

7. 다음 비트 연산자의 활용 결과를 16진수로 예측하시오.

0xFF00 & 0x00FF

★  0x0000 (and 연산)

0xFF00 | 0x00FF

★  0xFFFF (or 연산)

0xFF00 ^ 0x00FF

★  0xFFFF (xor 연산)

 

 

8. 다음 비트 시프트 연산자의 활용 결과를 예측하시오.

a = 100; a = a << 100; a = a >> 100; print(a)

★  왼쪽으로 100칸 만큼 비트를 이동했다가 다시 오른쪽으로 100칸 만큼 비트를 이동했기 때문에 원래 값인 100이 출력된다.

 

 

9. 다음과 같이 입력한 금액을 5만 원, 1만 원, 5000원, 1000원, 500원, 100원, 50원, 10원 동전으로 교환하는 프로그램을 작성하시오.

money = int(input("교환할 돈은 얼마? "))
fiftyThousand, money = divmod(money, 50000)   #divmod는 인자로 받은 두 수의 몫과 나머지를 튜플 형태로 반환한다.
tenThousand, money = divmod(money, 10000)
fiveThousand, money = divmod(money, 5000)
oneThousand, money = divmod(money, 1000)
fiveHundred, money = divmod(money, 500)
oneHundred, money = divmod(money, 100)
fifty, money = divmod(money, 50)
ten, money = divmod(money, 10)

print("50000원 %d장, 10000원 %d장, 5000원 %d장, 1000원 %d장" % (fiftyThousand, tenThousand, fiveThousand, oneThousand))
print("500원 %d장, 100원 %d장, 50원 %d장, 10원 %d장" % (fiveHundred, oneHundred, fifty, ten))
print("바꾸지 못하나 돈 ==> %d원" % money)

result

 

 

10. 115쪽의 [응용예제 02]를 활용해 비트 논리곱을 구현하려고, 숫자를 2개 입력받아서 각 숫자에 대한 2진수와 비트 논리곱의 결과 2진수를 출력하는 프로그램을 작성하시오. 예로 123과 456을 입력하면 1111011&1110010000의 결과 1001000이 다음과 같이 차례로 출력된다.

import turtle

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

## 2진수를 거북이로 표현하는 함수 ##
def binaryToTurtle(binary, num):    # 10진수 num과 num을 2진수로 바꾼 binary를 인자로 받음
    curX = swidth / 2

    # main 부분에서 실제 거북이를 찍는 부분만 따로 가져옴
    for i in range(len(binary) - 2) :
        turtle.goto(curX, curY)
        if num & 1:
            turtle.color('red')
            turtle.turtlesize(2)
            turtle.stamp()
        else:
            turtle.color('blue')
            turtle.turtlesize(1)
            turtle.stamp()
        curX -= 50
        num >>= 1  

## 메인 코드 부분 ##
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, num2 = map(int, input("숫자를 2개 입력하세요 : ").strip().split(' '))
    curY = 0        # 첫 번째 숫자 출력할 Y축 위치
    binaryToTurtle(bin(num1), num1)
    curY = -50       # 두 번째 숫자 출력할 Y축 위치
    binaryToTurtle(bin(num2), num2)
    curY = -100      # 결과 값 출력할 Y축 위치
    res = num1 & num2 
    binaryToTurtle(bin(res), res)   # 입력받은 두 숫자를 &연산 해 인자로 넘김


turtle.done()

 

result

728x90
반응형

'python > 파이썬 for Beginner' 카테고리의 다른 글

파이썬 for Beginner Chapter 07  (15) 2019.04.15
파이썬 for Beginner Chapter 06  (0) 2019.04.15
파이썬 for Beginner Chapter 05  (2) 2019.04.08
파이썬 for Beginner Chapter 03  (7) 2019.03.25
파이썬 for Beginner Chapter 02  (8) 2019.03.16
댓글