2016-04-29 10 views
0

Ich versuche, ein Stück Code zu machen, der eine 8-stellige binäre Zeichenkette in hexadezimale umwandelt, aber es scheint nichts auszugeben, ich denke, dass das Problem darin besteht, nachzuschlagen die Zeichen in der Binärdatei, aber ich bin mir nicht sicher. Der Code ist wie folgt:Python - Wie man mehrere Zeichen in einer Zeichenkette nachschaut

number = input("Enter your binary number: ") 
    if len(number) < 8: 
     for i in range(0,8-len(number)): 
      newnumber = "0"+number 
      number = newnumber 
    endnumber = ["",""] 
    result = "" 
    for i in range(2): 
     if i == 1: 
      startnumber = number[0:3] 
     else: 
      startnumber = number[4:7] 
     if startnumber == "0000": 
      result = result + "0" 
     elif startnumber == "0001": 
      result = result + "1" 
     elif startnumber == "0010": 
      result = result + "2" 
     elif startnumber == "0011": 
      result = result + "3" 
     elif startnumber == "0100": 
      result = result + "4" 
     elif startnumber == "0101": 
      result = result + "5" 
     elif startnumber == "0110": 
      result = result + "6" 
     elif startnumber == "0111": 
      result = result + "7" 
     elif startnumber == "1000": 
      result = result + "8" 
     elif startnumber == "1001": 
      result = result + "9" 
     elif startnumber == "1010": 
      result = result + "A" 
     elif startnumber == "1011": 
      result = result + "B" 
     elif startnumber == "1100": 
      result = result + "C" 
     elif startnumber == "1101": 
      result = result + "D" 
     elif startnumber == "1110": 
      result = result + "E" 
     elif startnumber == "1111": 
      result = result + "F" 
    print(result) 

Jede Hilfe wäre dankbar, danke!

+3

warum nicht 'hex (int ('1010101', 2))'? – jeremycg

+1

Beachten Sie, dass 'range (2)' '' 0, 1', nicht '1, 2' zählt, also werden Sie' number [4: 7] 'zuerst und dann' number [0: 3] ' –

+0

das hat es behoben, indem ich zuerst den zweiten Charakter machte, ich nahm immer an, dass es 1 war, dann 2 statt 0 dann 1 –

Antwort

2

Das Problem liegt darin, wie Sie Ihre Zeichenfolge schneiden. Speziell mit startnumber = number[0:3] und startnumber = number[4:7].

Verwenden Sie startnumber = number[0:4] und startnumber = number[4:8].

Warum?

startnumber = number[0:3] gibt Ihnen die ersten 3 Zeichen in number (dh number[0], number[1] und number[2])

Ex:

> number = "00001111" 
> startnumber = number[0:3] 
> print(startnumber) 
'000' 
> startnumber = number[0:4] 
> print(startnumber) 
'0000' 
> startnumber = number[4:8] 
> print(startnumber) 
'1111' 

EDIT: Wie in Frage Kommentare erwähnt, gibt es auch ein Problem mit Ihre Zuordnung von startnumber. Beachten Sie, dass Python (und die meisten Programmiersprachen) null-indexiert sind, was bedeutet, dass Iterationen im Allgemeinen bei 0 beginnen und bei n-1 enden. So iteriert range(2) tatsächlich von 0 bis 1, ausgenommen 2.

+0

Großartig, danke! Das hat wirklich geholfen :-) –

0

Dies ist auf so vielen Ebenen falsch.

1) Es ist builtin

int(number, 2) 

2) Wenn Sie das tun wollen, dass es manuell

result = 0 
for index, char in enumerate(number[::-1]): 
    if char == '1': 
     result += 2^index 
Verwandte Themen