将函数的输出馈送到与for循环相同的函数中

2024-06-12 07:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个MD5散列字符串的函数,现在我想多次迭代这个过程,每次在“重新”散列之前从十六进制散列输出中删除大量字符。在花了好几个小时寻找一种方法来实现这一点之后,我研究了range()函数,map()函数,试图用for循环和嵌套函数来实现这一点,但我缺乏提出正确问题的知识。答案可能在于功能,但我找不到一种方法将其应用于我的特定问题

下面是我的代码:

import hashlib

string = "randomstring"


def hash(string):
    en = string.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()
hash1 = hash(string)[:-10]
print("Hash #1", hash1)

def hash1a(hash1):
    en = hash1.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()
hash2 = hash1a(hash1)[:-10]
print("Hash #2", hash2)

def hash2a(hash2):
    en = hash2.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()
hash3 = hash2a(hash2)[:-10]
print("Hash #3", hash3)

def hash3a(hash3):
    en = hash3.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()
hash4 = hash3a(hash3)[:-10]
print("Hash #4", hash4)

def hash4a(hash4):
    en = hash4.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()
hash5 = hash4a(hash4)[:-10]
print("Hash #5", hash5)

def hash5a(hash5):
    en = hash5.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()
hash6 = hash5a(hash5)[:-10]
print("Hash #6", hash6)

我希望能够捕获第一个hash函数的输出,通过追加[:-10]对其进行修改,并将该值提交回hash函数。能够在列表或字典中捕获这一点(通过使用for循环?)将是理想的。我花了大约5个小时研究这个问题,我学到了很多。希望我能做得更好,但我真的需要一些指导。谢谢


Tags: 函数returndefhashresultmd5encodeen
2条回答

@Barmar回答得很好,但我想我可能会补充一点解释,希望能澄清一些事情

首先:函数是一种很好的方法,但是函数专门用于创建可调用的可执行代码块。在您的代码中,相同的代码块被冗余地用于创建“不同”的函数,这些函数只在变量名上不同,而不是在可执行代码上不同。因此,虽然您有正确的想法,但应该只有一个函数来实现这一点

这将是一个示例,从您的代码中可以看出,您的一个函数被多次调用:

def hash(string):
    en = string.encode()
    hex_result = hashlib.md5(en)
    return hex_result.hexdigest()

为了使用for循环调用此函数,您有两个选项:将for循环插入函数中,以便函数调用自身,如@Barmar所说,或者反之亦然,例如,在for循环内调用函数

如果您决定保持函数的原样,而不是按照@Barmar的建议对其进行修改(我个人会同意他的修改,但那就是我),那么您可以在循环中调用上面的hash()函数:

for _ in range(6):
    string = hash(string)[:-10]

这里有一个指向Python文档关于for循环的链接:https://docs.python.org/3/reference/compound_stmts.html#for

祝你好运,希望这有帮助:)

使用循环,并将散列的结果分配给用作hash()函数参数的变量

def hash_n_times(string, n):
    for _ in range(n):
        string = hash(string)[:-10]
    return string

print(hash_n_times("randomstring", 6))

相关问题 更多 >