Python 如何添加答案

Python 如何添加答案,python,Python,我有一段来自试卷的代码,我正在做,以获得额外的帮助 我需要帮助的代码有: def Denary(Hex): Result = '' ErrorFound = False DenaryEquivalent = '' EmptyInput="" for ThisHexDigit in Hex: if ThisHexDigit in ['1','2','3','4','5','6','7','8','9','0','A','B','C','D',

我有一段来自试卷的代码,我正在做,以获得额外的帮助

我需要帮助的代码有:

def Denary(Hex):
    Result = ''
    ErrorFound = False
    DenaryEquivalent = ''
    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': DenaryEquivalent = '0'
            elif ThisHexDigit == '1': DenaryEquivalent = '1'
            elif ThisHexDigit == '2': DenaryEquivalent = '2'
            elif ThisHexDigit == '3': DenaryEquivalent = '3'
            elif ThisHexDigit == '4': DenaryEquivalent = '4'
            elif ThisHexDigit == '5': DenaryEquivalent = '5'
            elif ThisHexDigit == '6': DenaryEquivalent = '6'
            elif ThisHexDigit == '7': DenaryEquivalent = '7'
            elif ThisHexDigit == '8': DenaryEquivalent = '8'
            elif ThisHexDigit == '9': DenaryEquivalent = '9'
            elif ThisHexDigit == 'A': DenaryEquivalent = '10'
            elif ThisHexDigit == 'B': DenaryEquivalent = '11'
            elif ThisHexDigit == 'C': DenaryEquivalent = '12'
            elif ThisHexDigit == 'D': DenaryEquivalent = '13'
            elif ThisHexDigit == 'E': DenaryEquivalent = '14'
            elif ThisHexDigit == 'F': DenaryEquivalent = '15'
            elif ThisHexDigit == '10': DenaryEquivalent = '16'
            elif Hex==EmptyInput:
                print('Empty input, try again.')
            Result = Result + DenaryEquivalent
        else:
            ErrorFound == True
            print('You have made a mistake')

    def HexToDenary():
        Hexadecimal = input('Enter a hexadecimal number: ')
        Converted = Denary(Hexadecimal)
        print (Converted)
运行时,没有错误,程序正常运行(这只是其中的一部分)。我想知道的是如何添加结果,而不是将其显示为二进制答案。例如,如果我输入'BB',我会得到'1111'而不是187。这应该很容易,但我想不出来


我知道这是一段过于复杂的代码,但它是给定的。

问题是等价物是字符串,而不是整数,因此它们被连接,而不是相加

因此,要解决:

if ThisHexDigit == '0': DenaryEquivalent = 0
然而,你表现出了一种非常糟糕的方式。当然,最好的方法是使用Python的内置处理不同的数字基(
int(hex_string,16)
),但是,假设这是一个编程练习,而不是使用大量的if语句,使用
dict
是合适的

hex_digits_to_dec = {"0": 0, ..., "F": 15}
生成此信息的快速方法如下所示:

hex_digits_to_dec = {k: v for (v, k) in enumerate('0123456789ABCDEF')}
Enumerate返回
(n,v)
的元组,其中v是传入的iterable(在本例中是字符串)中的每个值,n是一个数字,从0开始计数。我们使用听写理解来理解这个,反转键和值,然后制作一本字典。如果你觉得更容易或更清楚的话,你可以直接手写出来

然后我们可以做:

hex_string = hex_string.upper() #Save ourselves any errors from lowercase hex strings.
result = 0
try:
    for digit in hex_string:
        result = 16*result + hex_digits_to_dec[digit]
except KeyError:
    print("You made a mistake, this is not a valid hexadecimal number.")
这个循环遍历我们的十六进制字符串,将之前的值乘以16(我们继续下去,每个数字的值比它左边的数字小16倍),然后添加新数字的值

还值得注意的是,对于类,建议使用
大写字母
,对于局部变量,建议使用
小写字母加下划线

我以前的回答是这样的:

for power, digit in enumerate(reversed(hex_string)):
    result += (16**power)*hex_digits_to_dec[digit]
我们首先反转字符串以获得最低值的数字,然后枚举它们以告诉我们数字的位置(以及相应的值)。我们取16的幂(得到该位置
1
的值),然后乘以该数字的值,将它们相加


这是可行的,但有人指出这是一种效率较低的方法。

问题是,等价物是字符串,而不是整数,因此它们是串联的,而不是相加的

因此,要解决:

if ThisHexDigit == '0': DenaryEquivalent = 0
然而,你表现出了一种非常糟糕的方式。当然,最好的方法是使用Python的内置处理不同的数字基(
int(hex_string,16)
),但是,假设这是一个编程练习,而不是使用大量的if语句,使用
dict
是合适的

hex_digits_to_dec = {"0": 0, ..., "F": 15}
生成此信息的快速方法如下所示:

hex_digits_to_dec = {k: v for (v, k) in enumerate('0123456789ABCDEF')}
Enumerate返回
(n,v)
的元组,其中v是传入的iterable(在本例中是字符串)中的每个值,n是一个数字,从0开始计数。我们使用听写理解来理解这个,反转键和值,然后制作一本字典。如果你觉得更容易或更清楚的话,你可以直接手写出来

然后我们可以做:

hex_string = hex_string.upper() #Save ourselves any errors from lowercase hex strings.
result = 0
try:
    for digit in hex_string:
        result = 16*result + hex_digits_to_dec[digit]
except KeyError:
    print("You made a mistake, this is not a valid hexadecimal number.")
这个循环遍历我们的十六进制字符串,将之前的值乘以16(我们继续下去,每个数字的值比它左边的数字小16倍),然后添加新数字的值

还值得注意的是,对于类,建议使用
大写字母
,对于局部变量,建议使用
小写字母加下划线

我以前的回答是这样的:

for power, digit in enumerate(reversed(hex_string)):
    result += (16**power)*hex_digits_to_dec[digit]
我们首先反转字符串以获得最低值的数字,然后枚举它们以告诉我们数字的位置(以及相应的值)。我们取16的幂(得到该位置
1
的值),然后乘以该数字的值,将它们相加


这是可行的,但有人指出这是一种效率较低的方法。

您的程序使用字符串<代码>+连接字符串

您需要将操作数转换为数字

此外,应使用
dict
从一组数据映射到另一组数据:

dict((b,a) for a,b in enumerate(['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','10'])))

还要注意的是,您的程序没有正确执行转换,因为它没有将每个数字提高到正确的功率。

您的程序使用字符串<代码>+连接字符串

您需要将操作数转换为数字

此外,应使用
dict
从一组数据映射到另一组数据:

dict((b,a) for a,b in enumerate(['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','10'])))

还要注意,您的程序没有正确执行转换,因为它没有将每个数字提高到正确的功率。

您需要在程序中更改两行

Result = ''

当然你可以通过使用字典来简化它

>>> def denary(hex):
    denary_equivalent={'1':1,'2':2,'3':'3','4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'10':16}
    result = 0
    for this_hex_digit in hex:
        if this_hex_digit in denary_equivalent:
            result=result*16+denary_equivalent[this_hex_digit]
    return result

>>> denary('BB')
187
>>> 

您需要在程序中更改两行

Result = ''

当然你可以通过使用字典来简化它

>>> def denary(hex):
    denary_equivalent={'1':1,'2':2,'3':'3','4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'10':16}
    result = 0
    for this_hex_digit in hex:
        if this_hex_digit in denary_equivalent:
            result=result*16+denary_equivalent[this_hex_digit]
    return result

>>> denary('BB')
187
>>> 

我很抱歉,没有得到这个:十六进制BB是187,不是22。你不应该使用elif ThisHexDigit='10',因为ThisHexDigit永远不会有超过一个字符,这意味着永远不会执行elif部分。这个代码是给你的吗?是谁干的?我真的希望不是有执照教编程的人。难以置信。哪所大学?我想我从未见过比这更糟糕的Python程序:)@user1331579我代表网站道歉。代码真的很糟糕。当然,罪魁祸首是写这段代码的考官,而你正受到(合理的)愤怒的首当其冲。对不起,我没有得到这个:hex BB是187,不是22。您不应该使用elif ThisHexDigit=='10',因为ThisHexDigit永远不会有多个字符,这意味着永远不会执行elif部分。这段代码是给您的吗?是谁干的?我真的希望不是有执照教编程的人。难以置信。哪所大学?我想我从未见过比这更糟糕的Python程序:)@user1331579我代表网站道歉。代码真的很糟糕。当然,罪魁祸首是写这段代码的考官,而你却首当其冲