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

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 포인트

안녕하세요?

 

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

 

Copy
def isBinary(num):
    for i in num: # 변수 num이 문자열이어야 합니다.
        if i not in ('0', '1'):
            return False
    return True

 

 

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

 

Copy
num_10 = int(num_2, 2)

 

 

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

 

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

 

Copy
def isBinary(num):
    for i in num:
        if i not in ('0', '1'):

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

 

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

print(int(num, 2))

 

 

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

 

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

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

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

Copy
num = str(input("하나의 이진수를 입력하세요: "))

try :

   print(int(num,2))

except :

   print("이진수를 입력하세요!")
로그인 후 평가할 수 있습니다

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

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

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

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

       exit

 

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

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

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

로그인
🐛 버그신고