다음은 사촌동생 코딩학원 숙제를 도와주다가 만난 문제이다.
삼각형의 밑변의 길이와 높이를 입력 받아 넓이를 출력하고,
"Continue?"에서 'Y'나 'y'를 입력하면 작업을 반복하고 다른 문자를 입력하면 종료하는 프로그램을 작성하시오.
(넓이는 반올림하여 소수 첫째 자리까지 출력한다.)
아래 입출력 예시에서 키보드로 직접 치는 부분은 (입력)으로 구분하였다.
Width = 11
Height = 5
Triangle Area = 27.5
Continue? Y
Width = 10
Height = 10
Triangle Area = 50.0
Continue? N
요런식으로 밑변과 높이를 입력받아서 넓이를 나타내주면 되는 문제였다.
반복문 속에 넣어둬야 똑같은 작업을 반복할 수 있으므로
무한 루프를 만들고, prompt message와 함께 입력을 받고,
Continue의 응답에 따라서 코드를 계속 진행할지, 중간에 exit할지까지 코드를 만들었다.
다만 넓이를 반올림하고 이것을 첫째자리까지 출력하는 것이 이번에 중요하게 생각한 부분이다.
while (1) :
width = int(input("Width = "))
height = int(input("Height = "))
Triangle_Area = round(width * height / 2, 2)
print("Triangle Area =", "{0:0.1f}".format(Triangle_Area))
choice = input("Continue? ")
if choice == "Y" or choice == "y" :
continue
else:
exit()
내가 짠 코드는 이러하다.
✨ round 함수 (반올림)
round 함수를 사용하면 소수를 반올림할 수 있다.
round(2.4567, 2)
round 함수의 두 번째 인자는 소수 몇 번째 자리까지 나타내느냐를 의미한다.
위와 같이 입력하면 2.46이 출력된다.
다만 파이썬의 round 함수는 "오사오입 방식" 을 채택하고 있어서
4까지는 버림, 6부터는 올림을 하고, 5인 경우 앞자리가 홀수인 경우 올림, 짝수인 경우 내림을 한다.
이번 문제에서는 별로 중요하지 않은 개념이었는지 그냥 round 함수를 사용했는데도 정답이 나왔지만
세세한 값이 중요한 다른 문제를 풀게 된다면 중요한 부분일 것 같다.
✨ 문자열 슬라이싱
위 문제에서는 문자열 슬라이싱을 통해서 소수 첫째 자리까지 출력했다.
round 함수만 사용해서 반올림을 하면, 2.4600 과 같은 방식으로 출력되기 때문에
문자열 슬라이싱이 필요했다.
✔ [0 :5] 와 같은 방식으로 슬라이싱하기
중괄호를 사용하여 문자열을 슬라이싱 하는 방법이다.
a = "apple"
print(a[0:3])
# 'app'
0 <= a < 3 이 슬라이싱 되어 나온다.
이 방식을 사용할 때 유의할 사항 :
- 항상 시작 번호가 0일 필요는 없다. (a[1:4] 와 같은 형태로도 동작가능)
- 끝 번호를 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.
- 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.
- 둘다 생략하면 문자열의 처음부터 끝까지 뽑아낸다. (즉, 둘 다 생략해도 동작한다)
- 빼기(-) 기호를 사용할 수 있다. 빼기 기호는 뒤에서 n번째를 나타낸다.
a = "I have apple and I want to sell it."
print(a[5:-4])
print(a[0:-1])
# e apple and I want to sell
# I have apple and I want to sell it
그래서 여기서 -1은 '.' 을 나타내는 것이다.
✔ 문자열 포맷 코드를 사용하여 슬라이싱하기
print("%0.4f" % 3.141592)
# 3.1415
여기서 '.' 는 소수점 포인트, 그리고 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 위미한다.
소수점 앞의 숫자는 문자열의 전체 길이를 의미하는데, 0은 길이에 상관하지 않겠다는 의미이다.
그리고 0을 생략해 "%.4f" 으로 사용하기도 한다.
✔ 포맷 함수를 사용하여 슬라이싱하기
나는 이 방법을 사용해서 문제를 풀었다.
a = 3.141592
print("{0:0.4f}".format(a))
# 3.1415
포맷 함수는 여러가지로 활용도가 높아 나중에도 참고할 예정이다.
https://wikidocs.net/13#format < 여기를 후에도 많이 참고할 예정이다.
'Python' 카테고리의 다른 글
[Python] collections.deque 모듈과 요세푸스 문제 (0) | 2024.02.21 |
---|---|
[Python] list.sort(), sorted() - key=lambda를 사용한 정렬 (0) | 2023.09.01 |
[Python] 백준 10989 메모리 초과와 시간 초과 (0) | 2023.08.29 |
[Python] list 관련 내용 돌아보기 (0) | 2023.08.26 |