【问题标题】:unexpected behaviour when trying to do math in for loop尝试在 for 循环中进行数学运算时出现意外行为
【发布时间】:2021-08-06 03:23:29
【问题描述】:

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

#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

【问题讨论】:

  • power + 1 那行没有做任何事情。也许你的意思是power += 1
  • n*(16**power) 大概应该是 number*(16**power) ,而 power + 1 需要是 power += 1。您当前正在执行字符串乘法,并且仅将其乘以 1,因为 power 始终为 0
  • 哈哈哈多么简单的解决方法,我没发现。
  • >>> hex(375) >>>'0x177' 你到底在做什么?
  • 感谢@ShivamRoy,应该就是这样

标签: python hex exponent


【解决方案1】:

power + 1power+=1... 非常简单的修复

【讨论】:

  • OP 在l[i] = n*(16**power) 行中也使用了错误的变量,他乘以n 而不是number。另外,他终于返回了列表中的数字,而列表中的数字需要添加才能转换为十进制。
【解决方案2】:

据我所知,您正在将 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

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2021-08-09
    • 2011-05-08
    • 1970-01-01
    • 2020-01-27
    相关资源
    最近更新 更多