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我代表网站道歉。代码真的很糟糕。当然,罪魁祸首是写这段代码的考官,而你却首当其冲