파이썬3에서는 나눗셈이 완전히 나누어떨어져도 실수가 나온다.
//
(버림 나눗셈, floor division)을 이용하여 나눗셈 결과에서 소수점 이하를 버린다.
몫과 나머지 중 몫을 구할 때 '버림 나눗셈'을 사용하면 된다.
몫과 나머지를 함께 구하는 방법으로 divmod(나누어지는 수, 나누는 수)
가 있다. 결과는 튜플 형태로 나오며 quotient, remainder = divmod(5, 2)
형식으로 출력이 가능하다.
실수 표현에는 오차가 발생할 수 있으므로 오차에 대한 적절한 처리가 필요하다.
예로, 0.1 + 0.2
는 0.3
이 나와야 할 것 같지만 실제로는 0.30000000000000004
가 나온다.
이런 현상이 나오는 이유는 1부터 10까지의 정수는 10개지만 실수는 무한히 많기 때문에 유한개의 비트로 정확하게 표현할 수 없기 때문이다. 따라서 실수는 유한개의 비트를 사용한 근사값으로 표현된다.
프롬프트 x = input('문자열을 입력하세요: ')
로 입력을 받을 수 있다.
변수1, 변수2 = 변수2, 변수1
형식으로 두 변수의 값을 바꿀 수 있다.
변수1, 변수2 = input().split()
형태로 입력 값을 변수 두 개에 저장할 수도 있다.
map을 함께 사용하면 받은 문자열을 정수로 변환하는 것까지 한 번에 가능하다.
a, b = map(int, int('숫자 두 개를 입력: ').split(','))
1번에서 배운 개념으로 충분히 풀 수 있는 문제
a = int(input())
b = input() # 쪼개기 좋게 문자열 형태로 남겨둠
print(a * int(b[2]))
print(a * int(b[1]))
print(a * int(b[0]))
print(a * int(b))
if m > 44:
print(h, m-45)
else:
if h > 0:
print(h-1, m+15)
else:
print(23, m+15)
이번 문제는 헷갈려서 시간이 오래걸렸는데 변수가 많이 사용되기 때문에 변수 값이 어떻게 달라지는지 표를 그리면 명확해진다.
input_val = int(input())
answer = input_val
count = 0
while True:
count += 1
left = answer // 10
right = answer % 10
input_sum = left + right
# print('input_sum', input_sum)
sum_right = input_sum % 10
result = (right * 10) + sum_right
# print('result', result)
if result == input_val:
break
else:
answer = result
print(count)
case = int(input())
for i in range(case):
students = list(map(int, input().split()))
avg = sum(students[1:]) / students[0]
cnt = 0
for j in students[1:]:
if j > avg:
cnt += 1
print(str('%.3f' %round(100 * (cnt/students[0]), 3)) + '%')