해결된 질문
작성
·
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번 코드에서는 a
와 b
둘 다 문자열로 입력받고, print(int(a * b[2]))
에서는 두 문자열을 곱하려고 시도합니다. 문자열 곱셈은 문자열과 정수의 곱셈에서만 의미를 가지며, 문자열 끼리의 곱셈은 정의되어 있지 않으므로 오류가 발생합니다.
2번 코드에서는 a
를 처음부터 정수로 입력받습니다. 따라서 print(a * int(b[2]))
에서는 a
는 이미 정수이며, b[2]
(b 문자열의 세 번째 문자)를 정수로 변환하여 a
와 곱합니다. 이 연산은 정수와 정수간의 곱셈이기 때문에 원하는 결과를 얻을 수 있습니다.
1번 코드의 오류는 두 문자열 사이에서 정의되지 않는 곱셈 연산을 시도하기 때문에 발생하며, a
와 b
모두 문자열 타입이기 때문에 결과적으로 a * b[2]
가 성립되지 않습니다. 문자열을 곱셈하려면 하나는 반드시 정수 타입이여야 합니다.
2번 코드는 a
값을 정수로 받아들이고, b[2]
문자도 정수로 변환하여 연산하기 때문에 의도한 대로 작동하는 것입니다.
한 준님께 도움이 되었기를 바랍니다. 추가적인 질문이나 도움이 필요한 부분이 있다면 언제든 문의해주세요.
너무나 친절하고 자세한 답변 진심으로 감사합니다!!
1번 코드에서 print(int(a * b[2]))의 "int" 가 a와 b를 정수로 변환해주는 줄 알았는데, 그게 아닌가 보네요. 근데 2번 코드에서 print(a * int(b[2]))의 int(b[2]) 는 정수로 변환해주네요. 흠 어렵네요 ㅠㅠ