将for循环与while循环结合使用

时间:2017-07-21 19:30:23

标签: python for-loop while-loop hex

我正在尝试编写一个python脚本,它会找到X我的意思是

x & 0xe = 0x6

我想找到可以给我x & 0xe = 0x6

的十六进制结果的所有组合

所以我做的第一件事是创建一个测试x & 0xe = 0x6的脚本,这样我就能找到一些X组合

GetStr=(raw_input('1st Hex:'))
GetStr2=hex(0xe)

StrToHex=int(GetStr,16)
StrToHex2=int(GetStr2,16)
cal = (hex(StrToHex & StrToHex2))

while cal != hex(0x6):
    print "no"
    GetStr = (raw_input('1st Hex:'))
    GetStr2 = hex(0xe)

    StrToHex = int(GetStr, 16)
    StrToHex2 = int(GetStr2, 16)
    cal = (hex(StrToHex & StrToHex2))
else:
    print GetStr

第二个脚本是for循环,它将创建将在while循环中测试的所有组合

GetStr=(raw_input('1st Hex:'))
StrToHex = int(GetStr, 16)

GetStr2=hex(0x100)
StrToHex2=int(GetStr2,16)

for i in range(StrToHex,StrToHex2,1):
    print hex(i)

事情是我觉得很难让它按照我想要的方式工作,它所需要做的就是找到所有可以总和到0x6的组合并打印出来。

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,请注意,找不到x的{​​{1}}的所有值是不可能的,因为它们中有无数多个。 x & 0xe == 0x6bin(0x6)'0b110'bin(0xe),因此每个数字都包含两个数字中的所有位以及任何其他位 '0b1110'中也不会有解决方案。

关于您的代码:不完全清楚您的要求。据我所知,您希望将手动方法从第一个片段转换为自动测试某个范围内所有数字的循环。为此,我建议为0xe创建一个可以在两个循环中重用的函数,并为其他两个值定义一些变量。此外,目前您经常从check转换为int - 字符串并返回hex。只需使用int,然后转换为int进行打印。

您可以尝试这样的事情:

hex

甚至更短(但可能不那么可读):

# function used in both loops
def check(first, second, target):
    return first & second == target

# manual loop with user input
second, target = 0xe, 0x6
print("find solution for x & 0x%x = 0x%x" % (second, target))
while True:
    first = int(raw_input('1st hex: '), 16)
    if check(first, second, target):
        print("yes")
        break
    else:
        print("no")

然后,只需在while not check(int(raw_input('1st hex: '), 16), second, target): print("no") print("yes") 循环中调用该函数。

for