프로그래머스 파이썬 기초 해석 :: a와 b 출력하기 (f string)
프로그래머스 URL
https://school.programmers.co.kr/learn/courses/30/lessons/181951
프로그래머스 코딩테스트 카테고리
코딩 기초 트레이닝
Day 1 출력
Lv.0
문제 설명
입력받은 두 값을 문제가 원하는 형식에 맞게 출력하기
문제 이해
내가 설정한 값이 아니라, 임의적으로 입력받은 값을 출력하는 것이기에 변하는 값에 맞춰서 출력을 해야한다.
문제점
print("a = " ) ,,,?? 일단 이렇게 쓰고, 뭘 입력하느냐에 따라 변하는 변수를 어떻게 넣어야하는지 혼란스러워짐
문제 해답
1. 가장 기초적인 방법
a, b = map(int, input().strip().split(' '))
print("a =", a)
print("b =", b)
2. 문자열 포매팅 - %를 쓰는 방법
a, b = map(int, input().strip().split(' '))
print("a = %d" % a)
print("b = %d" % b)
%를 쓰는 포매팅 문법 )
값이 변하는 자리에 %d(숫자), %s(문자)를 넣고
→ 문자열 닫고나서 뒤에 %를 붙인 뒤, 넣을 값(숫자, 문자열, 변수도 가능) 을 적으면 됨
만약 "확률은 70%입니다."를 표현하고 싶은데, 70을 변수로 넣는다고 하면
print("확률은 %d%%입니다." % a)처럼 %%로 표현해야지 %가 출력이 된다. 그 이유는 특수문자 출력하는 방법 풀이법을 참고하면 좋다.
3. 문자열 포매팅 - format 함수를 쓰는 방법
파이썬이 버전 업그레이드가 되면서 문법들이 고도화가 되었고, 포매팅도 많이 업그레이드 되었다. 처음에는 % 기호를 쓰는 포매팅이었지만, format 함수를 쓰는 포매팅이 생기고, 최신 버전에서는 아래 4번처럼 f string을 쓰는 방법이 생겨났다. 이 또한, 문법이니 외워야할 것 같다.
format 함수는 중괄호 {}를 사용하여 값을 채워넣는 방식이다.
출력할 문자열 안에서 내가 넣고자하는 변수자리에는 {}를 쓰고나서, 문자열을 닫은 뒤
.format( --, --)를 넣으면 된다. format 함수의 안에 변수 갯수는 문자열 안에서 {} 를 몇개를 했느냐에 따라 달라질 것
문자열 뒤에 꼭 콤마를 쓰고 format을 써야하는게 포인트
a, b = map(int, input().strip().split(' '))
print("a = {}\nb = {}" .format(a,b))
3. 문자열 포매팅 - f string 을 활용하기
가장 최신의 방법이라서, 적용 안되는 파이썬 구버전을 설치했다면 실행이 불가능 할 수도 있다.
문자열 앞에 f 접두사를 붙여서 사용하는 방식이고, 중괄호 안에 변수나 표현식을 바로 넣어서 값을 대체할 수 있다.
가장 간결한 방식
a, b = map(int, input().strip().split(' '))
print(f"a = {a}\nb = {b}")
------------------------
참고
제공되는 첫 줄을 분석해보았다..
a, b = map(int, input().strip().split(' '))
1) map 함수
변수 = map(① 적용시킬 함수, ②적용할 값들)
②들을 ①처럼 바꿔서 새로운 자료형(리스트, 튜플 등)인 변수에 값을 적용한다.
즉, 이 문제에서는 map(int, ②) 이므로 ②값들을 int 형으로 변환한 것을 a, b 변수에 넣겠다라는 의미
2) input 함수
변수 = input()
input()를 쓰면, 사용자가 직접 값을 입력할 수 있게 만들고, 엔터를 치면 저장이 되서 변수에 담긴다
num = input("숫자를 입력하세요 : ")
print("입력한 숫자는", num, "입니다.)
num2 = int(input(숫자를 입력하세요 : "))
#위에있는 num와 다른점은 input()으로 받은걸 바로 int 형변환 시킴
print("입력한 값의 정수형은", num2, "입니다.)
3) strip 함수
변수 = 문자열.strip()
문자열에서만 수행되고, 다른 자료형인 튜플 등에서는 오류가 생기는 strip 함수
문자열의 시작과 끝의 무언가(공백, 문자 등)을 제거함을 의미한다.
괄호 속에 아무것도 없는 strip() 또는 strip(" ")은 공백 제거이고,
strip(".") 은 문자열 시작이나 마지막에 있는 마침표를 제거하겠다는 뜻
str1 = "123테스트123"
str2 = str1.strip("123")
print(str2) # "테스트"로만 출력이됨
4) split 함수
변수 = 문자열.split()
콤마 앞에 있는 문자열을 split()의 괄호 안에 있는 기준에 따라, 일정한 규칙으로 잘라서 리스트를 만들어 주는 함수
이 함수의 원래 본 모습은 split(① "구분자", ② 분활횟수) 인 것처럼 매개변수가 2개인데, 하나만 생략해도 되고 둘 다 생략해도 된다.
a) 매개변수가 둘 다(①, ②) 생략된 split()는 문자열에 있는 공백을 기준으로 무제한으로 짜르겠다.를 의미한다.
코드를 실행한 사진인데, 공백이 하나든 여러개든 공백대로 문자를 짤라서 리스트로 저장이 된걸 확인할 수 있었다.
5) 정리
a, b = map(int, input().strip().split(' '))
제시된 이 첫 줄의 뜻은 input()으로 값을 입력받고, strip()로 입력받은 문자열의 양쪽 공백을 제거한 뒤, split()로 공백을 기준으로 리스트가 만들어진다.
split()로 짤라진 리스트를 map(int, ___) 를 거쳐서 숫자형으로 바뀐다.
각 각의 숫자가 변수 a와 b에 저장이 된다.
------------------------
느낀점
하나의 문제를 정말 여러 방법으로 해결할 수 있음에 놀랐고, 다른 분들이 하는 풀이를 보고 최신 버전인 f string을 새롭게 알게되었다.
난 % 포매팅만 있는줄 알았고 그렇게 풀었는데 이는 과거 문법이었었다. .. ㅎㅋ
코딩 문제를 푸는 것 또한 중요하지만, 어떻게 해석을 하고 내껄로 바꾸는지가 중요한 것 같다.
이 글을 쓰기전에는 이 문제에서 주어지는 첫 줄인 map 함수에 대해서 잘 몰랐음에도 불구하고, 그냥 넘어가고 코딩을 풀었다는거에 의의를 뒀었다.
그치만 이 글을 쓰면서, 내가 얼마나 부족했는지 다시끔 깨달았고, 많은 걸 배웠다.
앞으로 코딩 풀이 글을 많이 써야겠다. .. ★
댓글
댓글 쓰기