2017-11-13 7 views
0
print ("This program reads an unsigned binary number of arbitrary length 
\nand tries to compute the decimal equivalent. The program reports an error 
\nif the input number contains characters other than 0 and 1.") 
dec = 0 
bin = 0 
factor = 1 

print ("Enter the binary number: ") 
bin = int(input()) 

while(bin > 0): 

    if((bin % 10) == True): 
     dec += factor 
     bin //= 10 
     factor = factor * 2 


    else: 
     print("unrecognized bit:") 


print ("I think your binary number in decimal form is: " ,dec) 

이것은 사용자의 이진수를 10 진수로 변환해야하는 프로그램을위한 코드입니다. 그것은 잘 작동하지만 사용자가 0 또는 1 이외의 숫자를 입력하면 "인식 할 수없는 비트"를 인쇄 할 "else"문을 추가하려고합니다. 종류는 작동하지만 프로그램이 "인식 할 수없는 비트"를 인쇄하더라도 사용자는 0과 1 만 입력했습니다. 이것은 일어나서는 안됩니다. 또한 관련 그림을 참조하십시오. 프로그램을 테스트하기 위해 12343을 입력했습니다. 인식 할 수없는 비트가 있지만 그 숫자에서 "1"을 가져 와서 16으로 변환하면 인식되지 않는 비트가 나타납니다. 이 두 가지 문제는 간단하게 해결할 수 있다고 생각하지만 확실하지 않습니다. 고맙습니다!간단한 파이썬 : 코드 구조에 관하여

picture

+0

질문에있는 코드의 들여 쓰기가 엉망입니다. 질문을 수정하고 수정하십시오. – martineau

답변

0

두 가지 문제 :

  1. 내가 다른 사람을 종료 휴식 조건을 추가 수정입니다, 우리는 출력 마지막 인쇄 문을 수 있는지 확인하기 위해 부울 추가

    조건부는 0 == FalseTrue으로 평가되므로 2 진 입력의 나머지가 1 인 경우에만 충족됩니다. 즉, 숫자가 0으로 끝나거나 (실제로는 이 포함되어 있음) (bin%10) == TrueFalse으로 평가됩니다 (측면 지점 : 오른쪽에 == True을 추가 할 필요가 없습니다).

  2. 관계없이 당신이보고있는 자리가 1 또는 0 여부 factordec에 추가하고, 당신은 0을 만나면 추가해서는 안됩니다.

그래서 코드는 다음과 같아야합니다

while(bin > 0): 
    remainder = (bin % 10) 
    if remainder in (0,1): 
     dec += factor * remainder 
     bin //= 10 
     factor = factor * 2 

    else: 
     print("unrecognized bit:") 
     break 
+0

고마워요! 그래도 문제가 하나 더 있는데 ... "인식 할 수없는 비트"문을 트리거하는 12345와 같은 것을 입력하면 어떤 이유로 프로그램을 실행할 때 "알 수없는 비트"가 약 bazillion 번 인쇄됩니다. 왜 이것이 될 수 있는지 아십니까? 어딘가에 휴식을 추가해야합니까? – user8930130

+0

예, 휴식을 추가하십시오. 조건문이 거짓이면'bin'의 값을 변경하지 않기 때문에 루프가 계속 진행됩니다. –

+0

많은 질문에 대해 유감스럽게 생각합니다.하지만 if 문 다음에 break 문을 추가했습니다. 이제 else 문은 유효하지 않은 문법입니다. – user8930130

0

그것의 들여 쓰기의 문제. if else 문이 무엇을 말하는지에 관계없이 마지막 행이 인쇄됩니다. 인식 할 수없는 심볼에 도달하면 while 루프를 종료하려고합니다. 지금은 else 문을 인쇄하지만 루핑을 유지합니다.

print ("This program reads an unsigned binary number of arbitrary length tries to compute the decimal equivalent. The program reports an error if the input number contains characters other than 0 and 1.") 
dec = 0 
bin = 0 
factor = 1 
success = 1 

print ("Enter the binary number: ") 
bin = int(input()) 

while(bin > 0): 

    if((bin % 10) == True): 
     dec += factor 
     bin //= 10 
     factor = factor * 2 


    else: 
     print("unrecognized bit:") 
     success = 0 
     break 

if(success): 
    print ("I think your binary number in decimal form is: " ,dec) 
0

당신은 법적으로 확인하기 위해 귀하의 의견을 테스트해야합니다. 정규식을 사용하여이 작업을 수행 할 수 있습니다. 와 bin = int(input()) 교체 : 입력 아무것도하지만, 사람 또는 0을 포함하는 경우

import re  
inp = input() 
if re.match('.*[^01]+.*', inp) is not None: 
    print("illegal character in input, must be ones and/or zeros") 
    exit() 

bin = int(inp) 

이 불법 문자 메시지를 인쇄합니다.