테스트 사이트 - 개발 중인 베타 버전입니다

파이썬 코딩 도와주세요 채택완료

Shoe23 4년 전 조회 1,897

num=str(input('하나의 이진수를 입력하세요: '))
d=0
p=1
i=(len(num))-1
 
for i in range(i+1):
    d=int(num[i])*p+d
    p=p*2
    i=i-1
str1= '이진수 %s을 십진법으로 표현한 값 = %d' %(num,d)
print(str1)

 

이 상태에서 num 에 이진수가 아닌 예를 들어 12345가 들어가면 '이진수가 아닙니다'

이진수가 맞다면, 위에 이진수를 변환하는 코드가 실행되게 해주실수 있으실까요?

너무 어렵습니다..

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
I
4년 전

안녕하세요?

 

우선 2진수 여부 판단은 문자열이 iterable하다는 점을 활용하여 다음과 같이 처리할 수 있겠네요 ^^

 

</p>

<p>def isBinary(num):

    for i in num: # 변수 num이 문자열이어야 합니다.

        if i not in ('0', '1'):

            return False

    return True</p>

<p>

 

 

한편 2진수 -> 10진수 변환은 int(value, base)를 활용하면 다음과 같이 간단히 처리할 수도 있겠네요 :)

 

</p>

<p>num_10 = int(num_2, 2)</p>

<p>

 

 

위 두 사항을 반영하여 이진수가 아니면 오류임을 표시한 후에 다시 입력을 받을 수 있도록

 

최종적인 스크립트를 작성하면 다음과 같습니다 ^^

 

</p>

<p>def isBinary(num):

    for i in num:

        if i not in ('0', '1'):</p>

<p>            print('이진수가 아닙니다')

            return False

    return True</p>

<p> </p>

<p>while True:

    num = str(input('하나의 이진수를 입력하세요: ')) # 입력받은 수를 문자열로 변환합니다.

    if isBinary(num):

        break</p>

<p>print(int(num, 2))</p>

<p>

 

 

문제 해결에 조금이나마 도움이 되셨기를 기원합니다 :)

 

그럼 오늘도 좋은 하루 되세요~ ^-^

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

4년 전

</p>

<p>num = str(input("하나의 이진수를 입력하세요: "))</p>

<p>try :</p>

<p>   print(int(num,2))</p>

<p>except :</p>

<p>   print("이진수를 입력하세요!")</p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

l=len(num)
for i in range(l):

  if( num[i]!='0' and num[i]!='1')

       print('이진수가 아닙니다')

       exit

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인