0

私は改訂のための試験紙をやっています。私が助けを求めている特定の質問ではありませんが、特定のデータが入力されたときにプログラムが誤って出力する理由がわかりません。

def Binary(Hex):
    Result = ''
    ErrorFound = False
    BinaryEquivalent = ''
    EmptyInput=""
    for ThisHexDigit in Hex:
        if ThisHexDigit in ['1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F']:
            if ThisHexDigit == '0': BinaryEquivalent = '0'
            elif ThisHexDigit == '1': BinaryEquivalent = '1'
            elif ThisHexDigit == '2': BinaryEquivalent = '2'
            elif ThisHexDigit == '3': BinaryEquivalent = '3'
            elif ThisHexDigit == '4': BinaryEquivalent = '4'
            elif ThisHexDigit == '5': BinaryEquivalent = '5'
            elif ThisHexDigit == '6': BinaryEquivalent = '6'
            elif ThisHexDigit == '7': BinaryEquivalent = '7'
            elif ThisHexDigit == '8': BinaryEquivalent = '8'
            elif ThisHexDigit == '9': BinaryEquivalent = '9'
            elif ThisHexDigit == 'A': BinaryEquivalent = '10'
            elif ThisHexDigit == 'B': BinaryEquivalent = '11'
            elif ThisHexDigit == 'C': BinaryEquivalent = '12'
            elif ThisHexDigit == 'D': BinaryEquivalent = '13'
            elif ThisHexDigit == 'E': BinaryEquivalent = '14'
            elif ThisHexDigit == 'F': BinaryEquivalent = '15'
            Result = Result + BinaryEquivalent
        elif ErrorFound == True:
            print('You have made a mistake')
        elif Hex==EmptyInput:
            print('Empty input, try again.')

    return Result

はい、これが非常に複雑なコードであることは承知していますが、試験問題に記載されているので、使用する必要があります。そのようになりましたが、すべての BinaryEquivalent 文字列のBinaryEquivalent = ''代わりに数値が含まれていました。

問題は、プログラムの表示中に 2 文字を入力したときです。たとえば、「BBB」と入力すると、「BBBBBB」と同様に 11 が出力されます。

4

3 に答える 3

2

returnステートメントをforサイクルから外す必要があります。

于 2012-04-10T12:00:37.150 に答える
0

解決策は、16進数が1桁の16進数である場合にのみ有効です。より長い数値を変換したい場合は、いくつかの修正を行う必要があります。

  1. Result単純なintにすることができ、0から始めます
  2. すべてのBinaryEquivalentはintである必要があるため、BinaryEquivalent = 0
  3. forループでは、結果を増やす必要があります。次を使用します。Result = 16 * Result + BinaryEquivalent
于 2012-04-10T12:09:13.663 に答える
0

returnステートメントはforループ内にあるため、反復は 1 回だけ実行されます。次のようにする必要があります。

for ThisHexDigit in Hex:
    #code

return result

ではない:

for ThisHexDigit in Hex:
    #code
    return result
于 2012-04-10T12:01:27.557 に答える