티스토리 뷰

728x90
반응형

책 "파이썬 for Beginner"의 연습문제를 개인적으로 풀어보고 올린 내용입니다.


Chapter 03 연습문제 풀이

 

1. 실행하면 오류가 발생하는 것을 모두 고르시오.

print(“500 + 500”)

print(“%d” % (500 + 500))

print(“%d” % (500, 600))    ★

print(“%d %d” % (700))    

 

## 둘 다 서식 문자의 개수와 대입되는 객체의 개수가 다르기 때문에 오류가 발생한다.

3-TypeError: not all arguments converted during string formatting

4-TypeError: not enough arguments for format string

 

2. print() 함수의 결과를 예측하시오.

print(“%d / %d = %d” % (10, 4, 10 / 4))

★    >10 / 4 = 2

print(“%d / %d = %f” % (10, 4, 10 / 4))

★    >10 / 4 = 2.500000

print(“%d / %d = %5.1f” % (10, 4, 10 / 4))

★    >10 / 4 =   2.5

print(“%d / %d = %5.0f” % (10, 4, 10 / 4))

★    >10 / 4 =     2

 

## 1번의 경우 10 / 4를 받는 서식 문자의 타입이 %d(정수형)이기 때문에 실제 계산된 값은 2.5지만 소수점 이하의 값을 버린다.

반면에 2번의 경우는 %f(부동 소수점 실수형)이라 뒤에 소수점까지 정확하게 출력된다. , 뒤에 의미없는 0까지 출력된다. %f는 디폴트로 소수점 아래 여섯 자리까지 무조건 출력하기 때문이다.

이를 보기 좋게 서식 표현을 정해줄 수 있다.

%소수점을 포함한 전체 자릿수”.“소수점 아래 표현할 자릿수f

먼저 소수점을 포한한 전체 자릿수만큼 공간을 확보한다. 그런 다음 오른쪽에서 부터 자릿수를 채워 나간다.

3번의 경우 5자리를 확보한 다음 "공백" 2칸 + "2.5" 3칸을 출력해 준다.

4번의 경우는 소수점 아래 자릿수가 0이기 때문에 정수부분인 "2"만 자릿수를 차지하고 나머지는 "공백"으로 채워진다.

만약 print("%5.3f" % 123.45)을 실행하면 어떻게 될까 ?

소수점 아래 표현할 자릿수가 "3"이므로 "123.450" 즉, 6자리를 출력해야 한다. 하지만 서식 표현을 5자리 공간 확보로 지정해 두었다.

이럴 경우 앞에 1이 버려지거나 오류를 출력하지 않을까 예상을 했다. 하지만 실제 출력 값은

123.450    이 출력된다. 아마도 파이썬의 print() 함수 내부에서 알아서 잘 처리해주는 것 같다.

참고로 print("%4.2f" % 123.45) 처럼 애초에 자릿수를 부족하게 확보해 두어도 출력은

123.45    로 정상 출력이 된다.

 

3. print() 함수의 결과를 예측하시오.

⓵ print("%05d" % 543)

★    >00543

⓶ print("%10s" % "파이썬")

    >      파이썬

⓷ print("%1.1f" % 123.45)

★    >123.4

 

## 정수나 문자열의 경우 역시 서식 표현을 해줄 수 있다. 마찬가지로 서식문자 사이에 오는 숫자가 할당할 공간 자릿수가 된다.

1번은 5자리의 공간을 할당했다. 단, 앞에 0을 붙이면 빈 "공백"을 "0"으로 채워준다.

2번은 문자열의 경우를 나타낸 것이다. 문자열도 문자 1개당 1자리를 차지한다. 단, 문자열은 앞에 0을 붙여도 "공백"으로 출력된다.

3번의 경우는 위에서 설명했듯이 충분한 자릿수 확보를 하지 못했음에도 print() 함수 내부에서 알아서 처리해준다.


4. 이스케이프 문자에 대한 설명 중 틀린 것을 모두 고르시오.

⓵ \n은 새로운 줄을 넘기며, Tab을 누른 효과를 준다.    

⓶ \t는 다음 탭으로 이동한다.

 \\는 \를 출력한다.

 \b는 삐 소리를 발생시킨다.    

 

## \n은 새로운 줄로 이동하는 이스케이프 문자로 Tab이 아닌 Enter를 누른 효과다.

\b는 뒤로 한 칸 이동하는 이스케이프 문자로 Backspace를 누른 효과를 준다. 참고로 \a가 벨 소리를 낸다.


5. 변수에 대한 설명으로 틀린 것을 모두 고르시오.

⓵ 파이썬은 변수의 선언을 생략해도 된다.

⓶ 변수 종류에는 정수형, 실수형, 불형, 문자열 등이 있다.

 a=b처럼 같이 변수에 변수를 대입할 수 없다.    

⓸ type() 함수는 변수에 저장된 값을 출력한다.    

 

## 파이썬의 장점 중 하나가 변수를 따로 선언해 두지 않고 바로 쓸 수 있다는 점이다. 게다가 변수를 사용할 때 따로 타입을 명시해 주지 않아도 된다.

변수의 종류에는 정수형, 실수형, 문자열, 불형 뿐만 아니라 튜플형, 리스트형, 딕셔너리형, 집합형도 있다.

파이썬도 다른 언어와 마찬가지로 변수에 변수를 대입하는 것이 가능하다. 단, 정확히 말하면 변수가 가리키는 주소 값을 참조하는 형태이다. (모든 것이 객체이기 때문에)

type() 함수는 파이썬 내장 함수로 변수의 자료형을 출력해주는 함수다. 변수에 저장된 값을 출력하는 함수는 print()다.


6. 코드를 실행하면 오류가 발생한다. 그 이유를 설명하시오.

a = b = 10 = c = d = 20

 

## 중간에 10 = c 을 처리해야 하는데, 이는 객체에 변수를 대입하는 형식이므로 당연히 에러를 발생시킨다.

SyntaxError: can't assign to literal


7. 각 진수를 10진수로 변환하시오.

⓵ 2진수 0011

★    2^1 * 1 +  2^0 * 1 = 2 + 1 = 3

 2진수 01010

★    2^3 * 1 + 2^1 * 1 = 8 + 2 = 10

 16진수 11

★    16^1 * 1 + 16^0 * 1 = 16 + 1 = 17

 8진수 17

★    8^1 * 1 + 8^0 * 7 = 8 + 7 = 15


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

int('1002', 2)    

 int('1008', 8)    

 int('AAFG', 16)    

 

## int('숫자', 진수)를 입력하면 해당 진수의 숫자를 10진수로 출력해 준다. 여기서 주의해야 할 점은 첫 번째 인자 '숫자'가 두 번째 인자 진수 표현에 맞는 숫자여야 한다.

위의 1, 2, 3 번 모두 숫자가 뒤의 진수 표현에 맞지 않는 숫자다. 2진수의 경우 1까지, 8진수는 7까지, 16진수는 F까지 표현 가능한데, 각각 2, 8, G까지 표현했다. 따라서 에러가 발생한다.

1번 - ValueError: invalid literal for int() with base 2: '1002'

2번 - ValueError: invalid literal for int() with base 8: '1008'

3번 - ValueError: invalid literal for int() with base 16: 'AAFG'


9. 코드의 출력값을 예측하시오.

bin(12); hex(12); oct(12)

 

## 각각 인자로 준 숫자를 bin()은 2진수로, hex()는 16진수, oct()는 8진수로 변환하여 출력하는 함수다. 위의 코드에서는 10진수 표현으로 12를 인자 값으로 줬다.

10진수를 2진수로 바꾸는 가장 간단한 방법은 12를 몫이 0이나 1이 나올때 까지 2로 나누는 방법이다. 하지만 위의 숫자는 작기 때문에 2의 제곱 수들의 합으로 구해보면 2^3 + 2^2 이므로 0b1100이다.

16진수도 마찬가지로 16의 제곱 수로 구하면 되는데, 12가 애초에 16을 넘지도 않는다. 16진수에서 10 = 0xa이기 때문에 12 = 0xc가 된다.

8진수 역시 8^1 + 4로 0o14로 간단히 구해진다.

따라서 출력 값은 0b1100 0xc 0o14

단, 출력 값을 터미널에서 보기 위해서는 print() 함수로 감싸줘야 한다. print(bin(12), hex(12), oct(12))


10. 16진수 글자 하나를 입력하면 16진수인지 아닌지를 구분하는 코드를 작성하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 첫 번째 인자 값으로 넣은 숫자를 10진수로 변환해주는 int() 함수를 이용합니다.
try:
    ## input()으로 입력받은 문자를 첫 번째 인자로 주고 두 번째 인자로 입력받은 문자가 16진수라고 명시해줍니다.
    num = int(input("16진수 한글자 입력 : "), 16)
    
    ## 위의 코드에서 에러가 발생하지 않았다면 10진수로 변환해 num값에 저장했을 것이므로 이를 출력
    print("10진수 ==>   %d" % num)
    
## 에러가 발생했다면 16진수로 변환할 수 없는 문자를 입력했기 때문에 에러 메세지를 띄우는 예외처리를 해줍니다.
except:
    print("16진수가 아닙니다")
cs



728x90
반응형

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

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