Python 中没有 itertools 的蛮力解决方案
Brute force solution without itertools in Python
我是 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
我收到错误 "index out of bound"。
我需要这样的输出:
000 #first
001
002
...
...
36f #found then break
...
...
fff #last
我该如何解决?
我相信你的 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()
returns一个str
,你不需要在上面调用str
;避免在 Python.
中使用分号 (;)
我是 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
我收到错误 "index out of bound"。 我需要这样的输出:
000 #first
001
002
...
...
36f #found then break
...
...
fff #last
我该如何解决?
我相信你的 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()
returns一个str
,你不需要在上面调用str
;避免在 Python.