Python/Basic programming

Ch02. 변수와 연산자

information-security-lab 2025. 3. 4. 00:30
목차
Ⅰ. 변수와 자료형
      1. 변수 문제 풀이
      2. 자료형 문제 풀이

Ⅱ. 함수의 입ㆍ출력 / 연산자
      1. 함수의 입ㆍ출력 문제 풀이
      2. 연산자 문제 풀이

Ⅲ. 플러스 예제
      1. 시간 단위 변환기
      2. 주문 금액 계산기

Ⅳ. 연습 문제

Ⅴ. 프로그래밍 문제

 


 

Ⅰ. 변수와 자료형

1. 변수 문제 풀이

연구 1-1)

7이라는 값을 가진 a라는 변수와 10이라는 값을 가진 b라는 변수의 변수값을 교환한 후 a와 b를 출력하시오.

 

풀이)

// 내가 작성한 코드
a, b = 7, 10
a, b = b, a
print(a, b)


// 답지의 또 다른 풀이
a = 7
b = 10
c = a     // c라는 제3의 변수를 임의로 만들어서 a의 값을 저장.
a = b     // a에 b의 값을 저장. 여기까지 보면 c = 7, a = 10
b = c     // b에 c의 값을 저장. b = c = 7  ∴ b = 7
print(a, b)     // "10 7" 출력

 

 

연구 1-2)

복합 대입 연산자를 사용해서 3의 배수 중 처음 네 가지 수를 출력하는 코드를 작성하시오.

 

풀이)

a = 3
print(a)
a += 3
print(a)
a += 3
print(a)
a += 3
print(a)

 

 

 

2. 자료형 문제 풀이

연구 2-1)

다음 코드의 결과가 무엇인지 작성하시오

print("convergence" + "programming")
print(23 - 25)
print(1.23 + 12.3e-1)

 

풀이)

convergenceprogramming
-2
2.46     // 12.3e-1 = 123/10 * 1/10 = 123/100 = 1.23

 

 


 

 

Ⅱ. 함수의 입ㆍ출력 / 연산자

1. 함수의 입ㆍ출력 문제 풀이

연구 1-1)

원의 반지름 값을 입력받아 소수점 셋째 자리까지의 원의 넓이를 구하는 코드를 작성하시오,

(단, pi = 3.14159256)

 

풀이)

pi = 3.14159256
r = int(input("원의 반지름을 입력하세요 : "))
a = r ** 2 * pi

print(f'반지름이 {r}인 원의 넓이는 {a:.3f}입니다.')

 

 

 

2. 연산자 문제 풀이

연구 2-1)

남성 지원자와 여성 지원자의 수를 입력받아 전체 지원자 중 남성이 차지하는 비율과 여성이 차지하는 비율을 소수점 둘째 자리까지 구하는 코드를 작성하시오.

 

풀이)

male_num = int(input("남성 지원자 수를 입력하세요 : "))
female_num = int(input("여성 지원자 수를 입력하세요 : "))
total = male_num + female_num
print(f'남성 지원자 비율은 {male_num/total:.2f}이고, 여성 지원자 비율은 {female_num/total:.2f}입니다.')

 

 

연구 2-2)

사용자로부터 입력받은 cm 단위의 길이를 m와 cm 단위로 변환하는 코드를 작성하시오.

 

풀이)

cm = int(input("cm 단위를 입력하세요 : "))
m = cm // 100
cm = cm % 100

print(f'{m}m {cm}cm')

 

 


 

 

Ⅲ. 플러스 예제

1. 시간 단위 변환기

분 단위를 시간 단위로 변환)

분 단위 시간을 입력받아 시간과 분 단위로 변환하는 코드 작성해보기

 

풀이)

m = int(input("분 단위 시간을 입력하세요 : "))
h = m // 60
m = m % 60

print(f'{h}시간 {m}분')

 

 

초 단위 시간을 시간, 분, 초 단위로 변환)

초 단위 시간을 입력받아 시간과 분, 초 단위로 변환하는 코드 작성해보기

 

풀이)

// 내가 작성한 코드

s = int(input("초 단위 시간을 입력하세요 : "))
h = s // 3600
m = (s % 3600) // 60
s = (s % 3600) % 60

print(f'{h}시간 {m}분 {s}초')



// 답지

s = int(input("초 단위 시간을 입력하세요 : "))
h = s // 3600
s = s % 3600
m = s // 60
s = s % 60 

print(f'{h}시간 {m}분 {s}초')

 

내가 작성한 코드와 답지의 코드 모두 동일한 결과를 출력하기 때문에 틀리지는 않았다.

그런데 나는 코드를 작성할 때 시간, 분, 초 단위 변수를 한 번에 구하기 위해 노력하였는데 답지는 초 단위 변수를 여러 차례에 걸쳐 정의하며 시간, 분, 초 단위 변수를 구하였다.

 

답지의 코드가 내가 작성한 코드보다 에러를 줄이고 안전하게 코드를 짜기에 좋아보인다.

 

 

관련 문제 1-1)

분 단위 시간을 일, 시간, 분 단위로 변환하는 코드를 작성하시오.

 

풀이)

m = int(input("분 단위 시간을 입력하세요 : "))
d = (m // 60) // 24
h = (m // 60) % 24
m = m % 60

print(f'{d}일 {h}시간 {m}분')

 

 

원래 하던 방식대로 한 번에 일, 시간, 분에 대한 변수를 한 번에 구하였다.

 

그런데 초 단위 시간을 시간, 분, 초 단위로 변환하기에서 처럼 변수를 여러번에 걸쳐 구하는 코드를 짜보면 아래와 같다.

m = int(input("분 단위 시간을 입력하세요 : "))
d = m // 1440
m = m % 1440
h = m // 60
m = m % 60

print(f'{d}일 {h}시간 {m}분')

 

 

도전 문제 1-1)

Byte 단위의 값을 입력받아 MB, KB, Byte 단위로 변환하는 코드를 작성하시오.

 

풀이)

b = int(input("byte 단위를 입력하세요 : "))
m = b // 1048576
b = b % 1048576
k = b // 1024
b = b % 1024

print(f'{m}MB {k}KB {b}B')

 

 

 

2. 주문 금액 계산기

주문 금액 계산기)

다음과 같은 메뉴판이 있을 때, 손님이 주문한 음료 가격의 합계를 계산하는 코드를 작성해보자.

메뉴판

 

풀이)

// 내가 작성한 코드


A = int(input("아메리카노를 몇 개 주문하셨나요? : "))
R = int(input("라떼를 몇 개 주문하셨나요? : "))
G = int(input("녹차를 몇 개 주문하셨나요? : "))

A = A * 2000
R = R * 3000
G = G * 2500
total = A + R + G

print(f'손님의 총 주문 금액은 {total}원입니다.')



// 답지 1


A = int(input("아메리카노를 몇 개 주문하셨나요? : "))
R = int(input("라떼를 몇 개 주문하셨나요? : "))
G = int(input("녹차를 몇 개 주문하셨나요? : "))
sum = A * 2000 + R * 3000 + G * 2500

print("주문 금액 :", sum)



// 답지 2


A_price = 2000
R_price = 3000
G_price = 2500

sum = 0

A_num = int(input("아메리카노 주문 수 : "))
sum += A_num * A_price

R_num = int(input("라떼 주문 수 : "))
sum += R_num * R_price

G_num = int(input("녹차 주문 수 : "))
sum += G_num * G_price

print("주문 금액 : ", sum)


------------------------------------------------------------------------


// '25. 03. 17. 다시 풀었을 때 작성한 코드
a_price = 2000
r_price = 3000
g_price = 2500

a_num = int(input("아메리카노 주문 수 : "))
r_num = int(input("라떼 주문 수 : "))
g_num = int(input("녹차 주문 수 : "))

a_total = a_price * a_num
r_total = r_price * r_num
g_total = g_price * g_num

total = a_total + r_total + g_total

print(f'총 주문 금액 : {total}원')

 

내가 작성한 코드와 답지 1의 코드는 코드 자체는 짧지만 갑자기 2000, 3000, 2500 이라는 숫자가 튀어나와 이 숫자들이 무엇을 의미하는지 쉽게 알 수 없다.

 

반면에 답지 2의 코드는 길이는 내가 작성한 코드와 답지 1의 코드보다 길지만 이 숫자들이 무엇을 의미하는지 변수 명으로 먼저 알려준 후 코드를 작성하기 때문에 내 코드와 답지 1의 코드에 비해 더 깔끔하고 알아보기 쉬운 느낌이다.

 

 

도전 문제 2-1)

다음과 같은 버스 요금표가 있을 때 버스에 탑승한 각 연령대의 사람 수를 입력받아 탑승객들로부터 받은 총 요금을 구하는 코드를 작성하시오.

요금표

 

풀이)

a_price = 1300
t_price = 1000
c_price = 450

sum = 0

a_num = int(input("일반 승객 수 : "))
sum += a_num * a_price

t_num = int(input("청소년 승객 수 : "))
sum += t_num * t_price

c_num = int(input("어린이 승객 수 : "))
sum += c_num * c_price

print(f'총 요금 : {sum}원')

 

 


 

 

Ⅳ. 연습 문제

연습 문제 1-1)

다음 코드의 실행 결과를 작성하시오.

tall = 180
print(tall)
print("tall")

 

풀이)

180
tall

 

 

연습 문제 1-2)

다음 코드의 실행 결과를 작성하시오.

a = 30
print(a)

a += 3
print(a)

a //= 4
print(a)

a %= 5
print(a)

a /= 2
print(a)

 

풀이)

30
33
8
3
1.5

 

 

연습 문제 1-3)

다음 코드의 실행 결과를 작성하시오.

print("Visual" + "Studio")
print(200 // 3)
print(12.3 + 1.23e-2)

 

풀이)

VisualStudio
66
12.3123

 

 

연습 문제 2-1)

다음 코드가 오류가 생기는 원인을 찾아서 알맞게 수정하시오.

100 = a
print(a)

 

풀이)

대입 연산자는 우측의 값을 좌측 변수에 대입한다.

변수와 값의 위치가 바뀌어 에러가 난 것이므로 아래와 같이 코드를 수정한다.

a = 100
print(a)

 

 

연습 문제 2-2)

다음 코드가 오류가 생기는 원인을 찾아서 알맞게 수정하시오.

a = 100
a =/ 3
print(a)

 

풀이)

대입 연산자를 " =/ "로 잘못 입력하였는데 이렇게 입력하면 SyntaxError:invalid syntax 에러가 뜨므로 대입 연산자를 " /= "로 알맞게 수정 필요.

a = 100
a /= 3
print(a)

 

 

연습 문제 2-3)

다음 코드가 오류가 생기는 원인을 찾아서 알맞게 수정하시오.

a = Programming
print(a)

 

풀이)

변수 a에 대입하는 값이 문자열이므로 따옴표로 감싸줘야함.

a = 'Programming'
print(a)

 

 

연습 문제 2-4)

다음 코드가 오류가 생기는 원인을 찾아서 알맞게 수정하시오.

a = input('정수를 입력하세요 : ')
b = input('정수를 입력하세요 : ')

print(a * b)

 

풀이)

정수를 입력받으려면 정수 문자형인 int를 input 앞에 써줘야 하는데 int를 생략했으므로 문자열 형식으로 입력되어 출력에 오류가 생김.

a = int(input('정수를 입력하세요 : '))
b = int(input('정수를 입력하세요 : '))

print(a * b)

 

 

연습 문제 2-5)

다음 코드가 오류가 생기는 원인을 찾아서 알맞게 수정하시오.

a = 1
print(f{a})

 

풀이)

f 문자열은 f 뒤를 따옴표로 감싸야 하는데 감싸지 않아 오류가 생김.

a = 1
print(f'{a}')

 

 

연습 문제 3)

a, b, c의 평균을 구하는 코드를 작성하였으나 원하는 결과가 나오지 않았다.

무엇이 잘못되었는지 확인하고 코드를 수정하라.

a = 3
b = 7
c = 11

print(a + b + c / 3)

 

풀이)

산술 연산에서는 덧셈보다 나눗셈을 먼저 수행한다.

그러므로 평균을 구하기 위해서는 a, b, c의 덧셈을 괄호로 묶어줘야 한다.

a = 3
b = 7
c = 11

print((a + b + c) / 3)

 

 

연습 문제 4)

a, b, c의 변수값이 각각 1, 2, 3일때 b의 값을 a로, c의 값을 b로, c의 값을 a로 이동하는 두 가지 방식의 코드를 작성하시오.

 

풀이)

// 방법 1


a, b, c = 1, 2, 3
t = a
a = b
b = c
c = t

print(a, b, c)



// 방법 2


a, b, c = 1, 2, 3
a, b, c = b, c, a

print(a, b, c)

 

 

연습 문제 5)

밑변과 높이의 값을 입력받아 삼각형의 넓이를 구하는 코드를 작성하시오.

 

풀이)

b = int(input("밑변의 값을 입력하세요 : "))
h = int(input("높이의 값을 입력하세요 : "))
a = b * h / 2

print(f'삼각형의 넓이는 {a}입니다.')

 

 

연습 문제 6)

주행 거리와 연비를 이용해서 필요한 연료량을 소수점 이하 두 자리 수로 구하는 코드를 작성하시오.

(연료량 = 주행거리 / 연비)

 

풀이)

dis = float(input("주행 거리(km)를 입력하세요 : "))
f_e = float(input("연비(km/l)를 입력하세요 : "))
f_a = dis / f_e

print(f'필요한 연료량은 {f_a:.2f}입니다.')

 

 

연습 문제 7

입력받은 cm 단위의 길이를 km, m, cm 단위로 변환하는 코드를 작성하시오.

 

풀이)

cm = int(input("cm 단위를 입력하세요 : "))
km = cm // 100000
cm = cm % 100000
m = cm // 100
cm = cm % 100

print(f'{km}km {m}m {cm}cm')

 

 


 

 

Ⅴ. 프로그래밍 문제

프로그래밍 문제 1)

사용자로부터 입력받은 제곱미터 단위의 값을 소수점 이하 둘째 자리까지의 평 단위로 변환하는 코드를 작성하시오.

 

풀이)

m = float(input("제곱미터 값을 입력하세요 : "))
p = m * 0.3025

print(f'{m}제곱미터는 {p:.2f}평입니다.')

 

 

 

끝.