Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数的输出馈送到与for循环相同的函数中_Python_List_Function_For Loop_Md5 - Fatal编程技术网

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

Python 将函数的输出馈送到与for循环相同的函数中,python,list,function,for-loop,md5,Python,List,Function,For Loop,Md5,我已经创建了一个MD5散列字符串的函数,现在我想多次迭代这个过程,每次在“重新”散列之前从十六进制散列输出中删除大量字符。在花了好几个小时寻找一种方法来实现这一点之后,我研究了range()函数,map()函数,试图用for循环和嵌套函数来实现这一点,但我缺乏提出正确问题的知识。答案可能在于类功能,但我找不到一种方法将其应用于我的特定问题 下面是我的代码: import hashlib string = "randomstring" def hash(string):

我已经创建了一个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)

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

使用循环,并将散列结果分配给变量,该变量用作
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()
为了使用for循环调用此函数,您有两个选项:将for循环插入函数中,以便函数调用自身,如@Barmar所说,或者反之亦然,例如,在for循环内调用函数

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

for _ in range(6):
    string = hash(string)[:-10]
下面是一个指向Python文档的关于for循环的链接:


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

Perfect,谢谢你
def hash(string):en=string.encode()hex_result=hashlib.md5(en)return hex_result.hexdigest()def hash_n_times(string,n):for u in range(n):string=hash(string)[:-10]返回字符串打印(hash_n_times(“randomstring”,100))