【问题标题】:Feeding the output of a function into the same function as a for loop将函数的输出馈送到与 for 循环相同的函数中
【发布时间】:2020-09-08 05:51:10
【问题描述】:

我已经创建了一个对字符串进行 MD5 哈希处理的函数,现在我想多次迭代这个过程,并且每次在它被“重新”哈希之前从十六进制哈希输出中删除一定数量的字符。在花了很多时间寻找一种方法之后,我研究了 range() 函数、 map() 函数,试图使它与 for 循环和嵌套函数一起工作,但我缺乏提出正确问题的知识.答案可能在于 class 功能,但我找不到将其应用于我的特定问题的方法。

下面是我的代码:

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 个小时研究这个,我学到了很多东西。希望我能做得更好,但实际上只需要一些方向。谢谢!

【问题讨论】:

    标签: python list function for-loop md5


    【解决方案1】:

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

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

    【讨论】:

    • 完美,谢谢def hash(string): en = string.encode() hex_result = hashlib.md5(en) return hex_result.hexdigest() def hash_n_times(string, n): for _ in range(n): string = hash(string)[:-10] return string print(hash_n_times("randomstring", 100))
    【解决方案2】:

    @Barmar 完美地回答了这个问题,但我想我可能会添加一点解释,希望能澄清一些事情。

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

    这将是一个示例,来自您的代码,您的 ONE 单个函数被多次调用:

    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]
    

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2020-04-30
      • 1970-01-01
      相关资源
      最近更新 更多