아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
심심한갈매기76
심심한갈매기7621.01.22

파이썬 타입변환 int('10' , 2) 질문

안녕하세요 지금 [처음시작하는 파이썬] 책을 보며 파이썬 기초를 공부하고 있는데요

Q1. 88페이지에서

추가로 지수를 취해서 10진수가 아닌 수를 10진수로 표현할 수 있다.

>>> int('10', 2) #2진수 (binary)

2

>>> int('10' , 8) # 8진수(octal)

8

>>> int ('10', 16) # 16진수 (hexadecimal)

16

>>> int('10', 22) ## 22진수

22

라고 책에 적혀있는데

int('숫자', 숫자) 이게 대체 어떤 원리인 건지 책 내용을 이해하려고 아무리 노력해 봐도 배경지식이 부족하여 이해가 안되서

질문 남깁니다.

내용이 이해가 안되서 터미널에 이것저것 입력하여 실행을 해 보았는데

int('99', 3)은 invalid 하다고 나오고

int('13', 2)도 invalid 이고,

int('99', 2)도 invalid ,

int('18', 2)도 invalid ,

int('10', 3)을 입력하면 3

int('숫자', 숫자) ◀ 이게 뭔말인지 이해할려고 이것저것 숫자를 입력해가며 이해하려 노력해봐도 도저히 이게 무슨 원리인지 모르겠어요 ㅠ

[추가로 지수를 취해서 10진수가 아닌 수를 10진수로 표현할 수 있다.]

이게 대체 뭔말인지 모르겠어요 ㅠ

int('숫자', 숫자) ◀ 이걸 대체 어떻게 이해하고, 해석할 수 있는 건지 여기계신 프로님들께 질문드립니다

Q2. int('98.6') 은 왜 잘못된 건가요?

55글자 더 채워주세요.
답변의 개수
3개의 답변이 있어요!
  • Q1.

    int('A숫자', B숫자) ◀ 이게 뭔말인지 이해할려고 이것저것 숫자를 입력해가며 이해하려 노력해봐도 도저히 이게 무슨 원리인지 모르겠어요 ㅠ

    => B진수 숫자A를 10진수 정수타입으로 바꾸라는 말입니다.

    우리가 일반적으로 쓰는 숫자는 10진수라고 합니다. 각 자리수마다 0에서 9까지 쓰고 10이되면 그 앞자리수가 올라가면서 10이 되죠. 그외 2진수, 8진수, 16진수 등을 사용합니다. 8진수 같은 경우는 0에서 7까지 쓰고 8이되면 앞자리수가 올라가면서 10이됩니다. 그래서 8진수 12가 십진수 10이랑 같습니다. 모르시면 진수 공부부터 다시해야 될 듯하네요.

    int('99', 3)은 invalid 하다고 나오고

    -> 99라는 3진수를 10진수로 바꾸라는 말입니다. 3진수는 각 자리수마다 0~2 까지만 쓸수 있습니다. 우리가 보통 쓰는 10진수 숫자에서 0~9까지 쓰듯이.. 그래서 99라는 3진수는 오류입니다.

    int('13', 2)도 invalid 이고,

    -> 이진수는 각 자리수마다 0~1까지만 쓸수 있습니다. 3이 있으니 오류납니다.

    int('99', 2)도 invalid ,

    -> 마찬가지로 이진수니까 9를 쓰면 안됩니다.

    int('18', 2)도 invalid ,

    -> 마찬가지로 이진수니까 8을 쓰면 안됩니다.

    int('10', 3)을 입력하면 3

    -> 3진수 10은 십진수 3입니다.

    십진수로 설명드리면 123은 (1*100)+(2*10)+(3*1) 입니다. 3진수 12는 (1*3)+(2*1)=5이구요. 스마트폰으로 제곱표시 쓰기가 어렵네요. 그러니까 뒷에서 첫자리는 3에 0승을 곱하고 , 두번째짜리는 3에 1승을 , 세번째자리는 3에 2승을 곱하는식입니다.

    Q2. int('98.6') 은 왜 잘못된 건가요?

    int는 정수라서 소수점이 올 수 없습니다.


  • 안녕하세요.

    int('숫자', 숫자)의 의미는 질문자님께서 말씀하신대로 '추가로 지수를 취해서 10진수가 아닌 수를 10진수로 표현할 수 있다'는 표현입니다. 즉, '숫자'는 10진수가 아닌 수가 들어가고, 뒤에오는 숫자는 앞의 '숫자'의 진법을 의미합니다.

    이것을 먼저 이해하려면 진법에 대한 이해가 확실하게 잡혀있어야할 것 같습니다. 흔히 우리가 사용하는 숫자는 10진법으로 0에서부터 9의 숫자를 이용합니다. 만약 3진법이라고 한다면 0, 1, 2 이렇게 3가지 숫자를 이용해서 숫자를 표현하구요.

    그렇기 때문에 아래 내용들이 맞는 결과가 되는 것입니다.

    >>> int('10', 2) #2진수 (binary)

    2 <--- 2진법으로 '10'이라는 수는 10진법으로 2

    >>> int('10' , 8) # 8진수(octal)

    8 <--- 8진법으로 '10'이라는 수는 10진법으로 8

    >>> int ('10', 16) # 16진수 (hexadecimal)

    16 <--- 16진법으로 '10'이라는 수는 10진법으로 16

    >>> int('10', 22) ## 22진수

    22 <--- 22진법으로 '10'이라는 수는 10진법으로 22

    그럼 아래 결과들이 왜 invalid한지 알아볼까요?

    int('99', 3)은 invalid 하다고 나오고 <--- 3진법은 0, 1, 2만 사용하는 진법이라 9라는 숫자는 3진법의 세계에 존재하지 않는 숫자입니다. 그렇기 때문에 99라는 수도 3진법에는 없는 숫자입니다.

    int('13', 2)도 invalid 이고, <-- '13'이라는 2진법 숫자를 10진법으로 출력하라는 명령인데, 2진법은 0, 1만 사용하는 진법이기 때문에 3이라는 숫자는 2진법의 세계에 존재하지 않는 숫자라서 invalid

    int('99', 2)도 invalid , <-- 이것 역시 2진법의 세계에 존재하지 않는 9라는 숫자가 들어가 있어서 invalid

    int('18', 2)도 invalid , <-- 2진법인데 8이라는 숫자가 들어있어서 invalid

    int('10', 3)을 입력하면 3 <--- '10'이라는 3진법의 숫자를 10진법으로 변환하라는 명령인데, '10'은 3진법으로 표현가능한 숫자입니다. 0, 1,2 만을 사용하는 3진법에서 1과 0으로 조합된 10은 사용가능한 숫자입니다. 참고로 3진법으로 숫자를 센다면 이렇게 될 것 같습니다. 0, 1, 2, 10, 11, 12,20, 21,22,100,101...

    그리고 int('98.6')은 98.6이 정수가 아닌 부동소수점 숫자라서 그렇습니다. int는 정수형 값만 처리하게 되어있습니다. 98.6같은 소수점이 포함된 부동소수점은 int가 아닌 float로 처리하셔야할 것 같습니다.

    위의 내용들을 이해하기 위해서는 일단 진법이 무엇인지 알고 있어야하며, int('숫자', 숫자)가 어떤 입력값을 받아 어떤 출력값을 출력하는지에 대한 이해만 있으면 충분할 것 같습니다.

    답변이 도움이 되었으면 합니다. 감사합니다 :)


  • '10' <== 이게 (2,8,16,22) 를 통해서 몇진수로 이루어진 숫자인지를 확인해주는것입니다

    int 는 결과값이 숫자라는것을 정의해주는것과 동시에

    우리가 잘 아는 10진수로 표기해준다고 보시면 됩니다

    계산법은 아래에 적어놨습니다^^

    >>> int('10', 2) #2진수 (binary) 2 ===> 1 * 2 ^ 1 + 0 * 2 ^ 0 = 2 >>> int('10' , 8) # 8진수(octal) 8 ===> 1 * 8 ^ 1 + 0 * 8 ^ 0 = 8 >>> int ('10', 16) # 16진수 (hexadecimal) 16 ===> 1 * 16 ^ 1 + 0 * 16 ^ 0 = 16 >>> int('10', 22) ## 22진수 22 ===> 1 * 22 ^ 1 + 0 * 22 ^ 0 = 22

    그리고

    int('99', 3)은 invalid 나오는 이유는 3진수 라고 정의를 하셨는데 3진수는 표현식이 ( 0 , 1 , 2 ) 만 있습니다

    근데 9가 나오니 에러죠

    마찬가지로 int('18', 2) 도 2진수라고 정의를 했는데 2진수는 표현식이 ( 0 , 1 ) 만 있습니다

    근데 8이 나오니 에러입니다

    마지막으로

    int('98.6') 이 에러가 없을려면? int ( 98.6 ) 으로 표기해줘야 합니다 int 는 숫자를 숫자로 처리하는것입니다

    근데 작은따옴표로 묶으니 아..이건 숫자가 아니라 문자구나 하면서 에러를 표시합니다 ^^