반응형

last update : 2024.01.21

백준에서 알고리즘을 풀면서 입력받은 값을 사용하는 방식에 참 다양한 게 있다는걸 알게되었다.

다음은 알고리즘을 풀면서 알게된 python의 다양한 입력방식에 대한 것들이다.
이 외에도 알고리즘을 계속 풀면서 알게되는 방법들에 대한 내용을 추가할 계획이다!

1. input

# 입력받기
A = input()

# 입력받은 것에 type 명시하기
A_int = int(input()

# 띄어쓰기로 구분된 여러 값 입력받기
Mul_A = map(int, input().split())

# 줄바꿈으로 구분된 두가지 값 (두 줄 기준) 입력받기
first_line = input()
second_line = input()

가장먼저 알게된 것은 python의 input 이었다.

1-1) input의 입력 type

python의 내장함수 input은 입력받은 값을 string 타입으로 변환하여 입력받는다.
python에서는 모든 것을 객체 (object)로 입력받는데, input 함수로 입력받은 것은 string class 로써 받아들여진다.

def check():
    intInput = input("python 내장함수 input으로 입력받기! (숫자) : ")
    print(intInput)
    print(type(intInput))

    stringInput = input("python 내장함수 input으로 입력받기! (문자) : ")
    print(type(stringInput))
    print(stringInput)
------------------------------------------------------------------
python 내장함수 input으로 입력받기! (숫자) : 123
>>> 123
>>> <class 'str'>
python 내장함수 input으로 입력받기! (문자) : 123
>>> <class 'str'>
>>> 123

이때 input으로 입력받는 값은 "Enter" 가 입력되기 까지 입력 받는 숫자 전부이다.

1-2) input의 개행문자열

"Enter"로 입력받는 input은 마지막 Enter에 대한 개행문자열은 삭제처리 된다. 문자열의 개행문자 삭제 함수인 rstrip() 가 자동으로 적용된 것이다. 이는 두번째로 알게된 입력방식 sys 보다 시간효율이 떨어지는 방식임을 의미한다.

1-3) 입력 방식 커스텀

input 함수는 값을 입력받을때 별도로 prompt message를 설정할 수 있다. 1-1 에서 볼수 있듯 "python 내장함수 input으로 입력받기!" 를 input 함수에 함께 써 넣으면 파일이 실행 될 때 해당 문구가 함께 나타나며 값을 입력받게 된다. python으로 만드는 간단한 숫자야구게임과 같은 프로젝트에서 이를 많이 활용하는 모습이다.

1-4) 입력받은 값 변수에 저장하기

input을 통해 입력받은 값은 변수로 저장이 가능하다. 이때 입력받은 당시 사용된 prompt message는 변수로 저장에서 배제된다.

def check():
    student = input("안녕 학생들 : ")
    print("오늘 출석한 학생들 명단 :", student)
    print("출석 일등!", student.split(" ")[0])
---------------------------------------------------
안녕 학생들 : 바둑이 철수 영희
>>> 오늘 출석한 학생들 명단 : 바둑이 철수 영희
>>> 출석 일등! 바둑이

띄어쓰기로 구분된 여러값을 입력받은 input()저장 변수 student는 string 타입이므로 띄어쓰기를 기준으로 이를 list로 변환하기 위해 split 함수를 사용했다.
이중 첫번째 인자값을 사용하여 첫번째 출석 학생 이름을 출력하도록 했다.

1-5) 타입을 지정하여 입력받기

input을 통해 입력받는 값의 타입을 입력과 동시에 지정할 수 있다.

def check():
    origin_input = input()
    print(type(origin_input))
    int_change_input = int(input())
    print(type(int_change_input))
    no_int_change_input = int(input())
---------------------------------------------------
1004  # origin_input
>>> <class 'str'>
1004  # int_change_input
>>> <class 'int'>
천사  # no_int_change_input
Traceback (most recent call last):
  File "/Users/practice.py", line 32, in <module>
    check()
  File "/Users/practice.py", line 30, in check
    no_int_change_input = int(input())
                          ^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: '천사'

하지만 변환이 되지 않은 경우 바로 ValueError 가 발생하니 타입이 명확할 경우에만 사용하여야 한다.

1-6) 값 여러번 입력받기

한줄에 여러값을 입력받을 수 있고, 여러줄을 입력받을 수 있다.
먼저 한줄에 여러값을 입력받을때 해당 값을 각각 변수로 저장하기 위해서는 공통된 구분값이 필요하다. 그리고 공통 구분값을 split() 함수를 활용하여 저장하도록 한다.

def check():
    first_input, second_input = input().split(",")
    print(first_input)
    print(second_input)
--------------------------------------------------
apple,orange
>>> apple
>>> orange

위 예제에서 한줄에 구분값으로 여러값을 입력받으면서 동시에 타입을 지정하기 위해선 python의 map 함수를 활용한다.
python의 map 함수는 다수의 값을 동시에 타입변환할때 사용되는 내장함수이다.

def check():
    first_input, second_input = map(int, input().split(","))
    print(first_input)
    print(type(first_input))
    print(second_input)
    print(type(second_input))
--------------------------------------------------
123,456
>>> 123
>>> <class 'int'>
>>> 456
>>> <class 'int'>

이때에도 역시 입력받은 값이 타입변환이 불가능할 경우 ValueError가 발생한다

123,사과
Traceback (most recent call last):
  File "/Users/practice.py", line 31, in <module>
    check()
  File "/Users/practice.py", line 26, in check
    first_input, second_input = map(int, input().split(","))
    ^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: '사과'

반응형

+ Recent posts