Python - 如何在字符串中查找多个字符

时间:2016-04-29 12:05:08

标签: python string python-3.x

我正在尝试制作一段将8位二进制字符串转换为十六进制的代码但是它似乎没有输出任何内容,我认为问题在于查找二进制文件中的字符,但我不确定。代码如下:

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)

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

问题在于你是如何切割字符串的。特别是startnumber = number[0:3]startnumber = number[4:7]

使用startnumber = number[0:4]startnumber = number[4:8]

为什么?

startnumber = number[0:3]为您提供number中的前3个字符(即number[0]number[1]number[2]

例如:

> number = "00001111"
> startnumber = number[0:3]
> print(startnumber)
'000'
> startnumber = number[0:4]
> print(startnumber)
'0000'
> startnumber = number[4:8]
> print(startnumber)
'1111'
编辑:正如您的问题评论中所述,您对startnumber的分配也存在问题。请注意,Python(和大多数编程语言)是零索引,这意味着迭代通常从0开始,到n-1结束。因此,range(2)实际上从0迭代到1,不包括2

答案 1 :(得分:0)

这在很多层面都是错误的。

1)内置

int(number, 2)

2)如果你想手动完成

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