我是Python的新手。
我正在尝试计算3 ** 16 (¹[0-f], ²[0-f], ³[0-f])
但它不能正常工作。
这是我的代码:
inp = str(input('value len 0-3 digit:'))
hexa = ('0123456789abcdef');
#len(hexa) = 16 digit
#pass = '36f'
pass = inp
for x in range(0, 3 ** len(hexa)):
#range = 0..(3 ^ 16)
if(hexa[x] == pass):
found = hexa[x]
#if result valid
print("pos: %d, pass: %s" % (x, found))
#print position
我收到错误“索引超出范围”。 我需要这样的输出:
000 #first
001
002
...
...
36f #found then break
...
...
fff #last
我该如何解决?
答案 0 :(得分:1)
我相信您的IndexError: string index out of range
错误来自以下逻辑:
for x in range(0, 3 ** len(hexa)):
可能应该是:
for x in range(len(hexa) ** len(inp)):
一个小得多的数字。输入超过一位的数字永远不会起作用:
if(hexa[x] == pass):
您需要重新考虑这一点。使用Python自己的hex()
函数,我得出了我猜测您正在尝试做的事情的近似值:
hexadecimal = input('hex value of 1-3 digits: ').lower()
hex_digits = '0123456789abcdef'
for x in range(len(hex_digits) ** len(hexadecimal)):
if hex(x) == "0x" + hexadecimal:
print("pos: %d, pass: %s" % (x, hexadecimal))
break
输出
> python3 test.py
hex value of 1-3 digits: 36f
pos: 879, pass: 36f
>
如果这不是您要尝试的操作,请在问题中进一步解释。
要考虑的其他问题:不要使用pass
作为变量的名称,它是一个Python关键字; input()
返回str
,您无需在其上调用str
;避免在Python中使用分号(;)。