강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Han Jun님의 프로필 이미지
Han Jun

작성한 질문수

파이썬 input() int()

해결된 질문

작성

·

155

0

안녕하세요, 아래 두 코딩의 차이가 있더라고요. 근데 구체적인 이유를 정확히 모르겠어요. 1번은 처음에는 자료형으로 입력 받고 2번은 b만 처음에 자료형이죠 하지만 결국엔 1번 2번 둘다 출력은 int로 하는거 아닌가요?

 

1.

a = input()

b = input()

print(int(a * b[2]))

 

2.

a = int(input())

b = input()

print(a * int(b[2]))

 

1번과 2번의 차이는: 

1번은 a, b 둘 다 입력값을 숫자로 줄때 에러가 나지만,

2번은 제가 의도한 대로 a값 곱하기 b의 셋째 자리 수를 하더라고요. 

이유가 뭘까요?

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.
한 준님, 질문 주신 파이썬 코드의 차이에 대해 설명드리겠습니다.

우선, input() 함수는 사용자로부터 입력을 받을 때, 입력받은 값을 문자열(str) 타입으로 반환합니다. 따라서 input()으로 받은 값은 기본적으로 계산을 진행하기 전에 숫자 타입(int 혹은 float)으로 변환해야 연산이 가능합니다.

1번 코드에서는 ab 둘 다 문자열로 입력받고, print(int(a * b[2]))에서는 두 문자열을 곱하려고 시도합니다. 문자열 곱셈은 문자열과 정수의 곱셈에서만 의미를 가지며, 문자열 끼리의 곱셈은 정의되어 있지 않으므로 오류가 발생합니다.

2번 코드에서는 a를 처음부터 정수로 입력받습니다. 따라서 print(a * int(b[2]))에서는 a는 이미 정수이며, b[2](b 문자열의 세 번째 문자)를 정수로 변환하여 a와 곱합니다. 이 연산은 정수와 정수간의 곱셈이기 때문에 원하는 결과를 얻을 수 있습니다.

1번 코드의 오류는 두 문자열 사이에서 정의되지 않는 곱셈 연산을 시도하기 때문에 발생하며, ab 모두 문자열 타입이기 때문에 결과적으로 a * b[2]가 성립되지 않습니다. 문자열을 곱셈하려면 하나는 반드시 정수 타입이여야 합니다.

2번 코드는 a 값을 정수로 받아들이고, b[2] 문자도 정수로 변환하여 연산하기 때문에 의도한 대로 작동하는 것입니다.

한 준님께 도움이 되었기를 바랍니다. 추가적인 질문이나 도움이 필요한 부분이 있다면 언제든 문의해주세요.

Han Jun님의 프로필 이미지
Han Jun
질문자

너무나 친절하고 자세한 답변 진심으로 감사합니다!!

 

1번 코드에서 print(int(a * b[2]))의 "int" 가 a와 b를 정수로 변환해주는 줄 알았는데, 그게 아닌가 보네요. 근데 2번 코드에서 print(a * int(b[2]))의 int(b[2]) 는 정수로 변환해주네요. 흠 어렵네요 ㅠㅠ

Han Jun님의 프로필 이미지
Han Jun

작성한 질문수

질문하기