尝试在for循环中进行数学运算时出现意外行为

2024-06-16 15:26:38 发布

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

尝试编写将十六进制转换为十进制的简单代码时:

#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','7','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','7','5']
    l.reverse()                       #['5','7','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', '2', 'a', '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

Tags: innumberforreturndefintegernumlist
2条回答

power + 1power+=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

相关问题 更多 >