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