作为练习,我将数字转换为十六进制值。有没有更专业的方式呢?
def hexayacheviren(reqem):
if reqem==10:
return "A"
elif reqem==11:
return "B"
elif reqem==12:
return "C"
elif reqem==13:
return "D"
elif reqem==14:
return "E"
elif reqem==15:
return "F"
else:
return reqem
def hexadecimal(n):
cavab=[ ]
i=0
while (n>0):
netice=n%16
cavab.append(hexayacheviren(netice))
i=i+1
n=n//16
string=''.join(str(e) for e in cavab)
cvbstrng = string[::-1]
print (cvbstrng)
hexadecimal(3200)
答案 0 :(得分:3)
使用内置函数:hex
。 Python包括电池
>>> hex
<built-in function hex>
>>> hex(9)
'0x9'
>>> hex(21)
'0x15'
>>> hex(10101010101010101010101010101010101)
'0x1f204abeac202ce18095d40a57eb5L'
答案 1 :(得分:1)
您可以使用dict
简单地使用第一个函数,并可能引入一些错误处理,例如:
def hexayacheviren(reqem):
if not 0 <= reqem < 16:
raise ValueError('Out of range')
return {10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'}.get(reqem, str(reqem))
如果值是10,11,12之一...则返回相应的字母,否则返回原始数字作为字符串。这将使您能够简化第二个函数,因为它的输入始终采用int,并且其输出将始终为字符串。
答案 2 :(得分:0)
这是我使用Python的一些更有趣的功能的解决方案,例如yield,生成器理解,三元运算符,字符串索引以及各种杂乱的杂项:
#!/usr/bin/env python
def nibbles(n):
m = max(4, (n.bit_length()+3) & -4)
while m > 0:
m -= 4
yield (n >> m) & 0x0F
def _hexadecimal(n):
return "".join("0123456789ABCDEF"[nib] for nib in nibbles(n))
def hexadecimal(n):
return "-"+_hexadecimal(-n) if n < 0 else _hexadecimal(n)
if __name__ == "__main__":
import sys
u = [hexadecimal(i) for i in range(0x10010)]
v = [hex(i)[2:].upper() for i in range(0x10010)]
if u == v:
print("tested ok")
sys.exit(0)
else:
print("test failed!")
sys.exit(1)