2017-12-09 1 views
0

그래서 1과 0의 사용자 입력을 잘라서 십진수를 인쇄하려고했지만 "10000000111111110000001100001111" 255 대신 두 번째 숫자 8 개를 256으로 얻습니다. 나는 값 1에 대해 128을 얻는다. 그러나 값 2에 대해 256을 얻는다. 나는 (숫자 [6:10]) 무엇을하고 있는지 이해할 수 없다고 생각한다.사용자 문자열을 10 진수 반환을 위해 함수로 분해하려고 시도했습니다. - Python

def convert(bits): 
    answer = 0 
    keeper = 128 
    for i in bits: 
     if(i == '1'): 
      answer = answer + keeper 
      keeper/2 
    return answer 





number = str(input("Please enter a 32-bit integer: ")) 


value1 = convert(number[0:7]) 
value2 = convert(number[6:10]) 

print(value1, value2) 
+1

'키퍼/2'를 '키퍼/= 2'로 변경합니다. –

+0

고마워요! 이제 "255.0"이 출력되고 어떻게 ".0"을 없앨 수 있습니까? – Catz

+0

'keeper // = 2'은 트릭을 할 것입니다 –

답변

0

당신이 keeper/2을 수행 할 때 keeper의 값이 업데이트되지 않습니다. 당신은 또한에 인덱스를 변경해야

keeper = keeper // 2 또는

는 8 개 비트 블록으로 사용자의 입력을 분할 할 때문에 keeper //= 2 :

당신은 그 진술의 값을 잡아 골키퍼에 할당해야 너의 조각. 귀하의 경우에는 당신이 원하는 것 :

value1 = convert(number[0:8]) 
value2 = convert(number[8:16]) 

내가 무엇을 (번호 [6시 10분])도하고있다 이해할 수 있다고 생각하지 않습니다.

number은 사용자가 입력 한 숫자의 문자열 ("10000000111111110000001100001111")로 설정됩니다.

number[6:10]이라고 말하면 문자열의 특정 조각을 얻는다는 의미의 문자열을 잘라냅니다. 첫 번째 숫자 6는 출발점이 될 것입니다 및 10 엔드 포인트 -하지만 10 당신이 문자열 인덱스 6에서 시작 에서 끝나는하지만 인덱스 10에서 문자를 포함하지 않음을 얻을 것이다 의미 독점입니다 있습니다. 또한 문자열의 첫 번째 인덱스는 0이며 1이 아닙니다. 유용한 예가 있습니다. here.

+0

8 진수 블록을 10 진수로 변환하려고합니다. 블록의 ** 첫 번째 ** 숫자가 1이면 '대답'에 '128'을 추가해야합니다. 그렇지 않으면'키퍼 '값을 업데이트해야합니다. 제 생각에는 [이 그림] (https://www.wikihow.com/images/thumb/e/e2/Convert-from-Binary-to-Decimal-Step-3-Version-2.jpg/aid5975-v4-728px -Convert-from-Binary-to-Decimal-Step-3-Version-2.jpg) 도움이 될 것입니다. 문자열을 트래버스 할 때 숫자가 1이 아니더라도'keeper'의 값을 업데이트해야합니다. 그래서'keeper // = 2'를 if (reduce indent) 외부로 옮겨야합니다. – Joseph

+0

정말 고마워요! 나의 마지막 문제는 "파수꾼"이었습니다. 마침내 그것을 알아 냈다! 다시 감사합니다! – Catz

+0

마지막으로 한 가지만 신경 쓸 수 있을까요? 내가 실행할 때 : print (value1, ".", value2, ".", value3, ".", value4) 128을 출력한다. 255. 삼 .15, 어떻게 그 모든 공간을 없앨 수 있습니까? – Catz