需要帮助追踪转化率吗

2024-10-02 22:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这可能有点混乱,但我对Python还不熟悉。我有一个学校项目的任务,创建一个二进制到二进制的转换器,可以将二进制转换为255和8位二进制。你知道吗

我基本上把输入的内容,拆分,检查,放到一个列表中,计算出来,放到另一个列表中,然后打印完成的列表。除了最后一部分-转换,一切都正常。提前谢谢。你知道吗

我在两次转换中都遇到了这个错误:

    Traceback (most recent call last):
  File "C:\Users\massi_000\Desktop\COM\Task 1 #2.5.py", line 101, in <module>
    main()
  File "C:\Users\massi_000\Desktop\COM\Task 1 #2.5.py", line 91, in main
    checkUp(noToConvert, mainOp)
  File "C:\Users\massi_000\Desktop\COM\Task 1 #2.5.py", line 80, in checkUp
    binaryToDenary(noToConvert)
  File "C:\Users\massi_000\Desktop\COM\Task 1 #2.5.py", line 30, in binaryToDenary
    while int(doneListBin[int(r)]) > 1:
  IndexError: list index out of range

这是我的全部代码。你知道吗

doneListBin = []
doneListDen = []
splitList = []
doneList = []


def denaryToBinary(splitList):
    #Works binary
    for r in splitList:
        doneListDen.append(int(splitList[int(r)]) % 2)
        while int(doneListDen[int(r)]) > 1:
            doneListDen.append(int(splitList[int(r)]) % 2)
    print(doneListDen)

def binaryToDenary(splitList):
    #Works denary
    for r in splitList:
        doneListBin.append(int(splitList[int(r)]) * 2 ** (int(r) + 1))
        while int(doneListBin[int(r)]) > 1:
            doneListBin.append(int(doneListBin[int(r)]) * 2 ** (int(r) + 1))
    print(doneListBin)

经过这里一切都很好

def checkUp(noToConvert, mainOp):
    try:
        if int(noToConvert) < 0:
            raise ValueError

        elif noToConvert.isdigit() == False:
            raise ValueError

        elif mainOp == 'd':
            if int(noToConvert) > 255:
                raise ValueError

            else:
                #Splits input for checking & passes
                splitList.extend(noToConvert)
                print(splitList)
                denaryToBinary(noToConvert)


        elif mainOp == 'b':


            #Makes sure it's not huge
            if int(len(str(noToConvert))) > 8:
                raise ValueError

            #Splits input for checking
            splitList.extend(noToConvert)
            print(splitList)

            #Makes it 8-bit
            if int(len(noToConvert)) < 8:
                for i in range(8 - int(len(noToConvert))):
                    splitList.insert(0, 0)
            #while int(len(str(splitList))) < 8:
             #   splitList.insert(0, 0)
               # print(splitList)


            #Should only accept valid inputs (0s and 1s)
            for i in splitList:
                if int(splitList[int(i)]) == 0 or int(splitList[int(i)]) == 1:
                    print(str(i) + ' in range')

                else:
                    raise ValueError
            binaryToDenary(noToConvert)
    except ValueError:
        main()


def main():
    ###     CHOICES     ###
    mainOp = input("Do you want to convert from (D)enary or from (B)inary?: ").lower()
    noToConvert = input("What is the number to convert?: ")

    if mainOp in ("d", "denary", "b", "binary"):
        checkUp(noToConvert, mainOp)


    else:
        raise ValueError



        #   EXECUTION    #
main()

Tags: inforifmain二进制fileintraise
1条回答
网友
1楼 · 发布于 2024-10-02 22:30:02

你可以试试

def binaryToDenary(splitList):
    doneListBin = []
    for r in range(0, len(splitList)):
        doneDigit = int(splitList[int(r)]) * 2 ** (len(splitList)-int(r)-1)
        doneListBin.append(doneDigit)
    print sum(doneListBin)

同样在checkUp(noToConvert,mainOp)中,应该使用binaryToDenary(splitList)而不是binaryToDenary(noToConvert)

一元到二元

def denaryToBinary(noStr):
    #Works binary
    doneListDen = []
    noToConvert = int(noStr)
    while(noToConvert>0):
       doneListDen.append(noToConvert%2)
       noToConvert = noToConvert // 2
    doneListDen.reverse()
    print doneListDen

相关问题 更多 >