如何解决尝试在 for 循环中进行数学运算时出现意外行为
同时尝试编写简单的代码将十六进制转换为十进制:
#Hex multiply by 16 depending on position: 0xAB = A*16 + B = 10*16
#0x375
#3*(16**2) + 7*(16**1) + 5
我需要反转数字,因为 16
的指数会向右增加
def tohex(integer): #375
power = 0
l = [num for num in str(integer)] #['3','7','5']
l.reverse() #['5','3']
for i,n in enumerate(l): # OK
number = int(n) # OK
l[i] = n*(16**power) # ???
print(l[i])
power + 1
l.reverse()
return "".join(l)
print(tohex(375))
输出:
─$ python3 hextobase64.py
5
7
3
375
在我看来,l[i] = n*(16**power)
根本没有做任何事情。这是为什么?
编辑: 固定版本:
def tohex(integer): #375
power = 0
f = []
l = [num for num in str(integer)] #['3','3']
for n in l: # OK
number = int(n)
f.append(number*(16**power))
power += 1
return sum(f)
print(tohex(375))
└─$ python3 hextobase64.py
885
上次编辑:
将 abcdef
翻译成 10 11 12 13 14 15
的函数:
def removeletter(list):
#function to convert all letters in decimal to hex for todecimal()
for i,letter in enumerate(list):
if letter in hextable.keys():
list[i] = hextable[letter]
return list
hextable = {}
for number,letter in enumerate(lowers[:6]):
hextable[letter] = number + 10
def todecimal(h):
power = 0
l = [num for num in str(h)] #['3','a','2','f']
l = removeletter(l)
l.reverse() #['f','3']
for i,n in enumerate(l):
number = int(n)
l[i] = number*(16**power)
power += 1
l.reverse()
return sum(l)
print(todecimal('49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d'))
输出:
python3 hextobase64.py
11259432467145572969189485457381052543241507215288737798329079056359121649591228422793827173000297562297701340508013
解决方法
power + 1
到 power+=1
...非常简单的修复
我从您的问题中了解到您正在将 hexadecimal
数字转换为 decimal
。您在 l[i] = n*(16**power)
行中使用了错误的变量,您正在乘以 n
而不是 number
。正如大家提到的,您应该使用 power += 1
在每次迭代中增加功率。此外,您最终将返回列表中的数字,而列表中的数字需要添加才能转换为十进制。
对代码进行了一些更改:
def tohex(integer):
power = 0
l = [num for num in str(integer)]
l.reverse()
for i,n in enumerate(l):
number = int(n)
l[i] = number*(16**power)
power += 1
l.reverse()
return sum(l)
print(tohex(375))
输出:
885
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。