将函数的输出馈送到与 for 循环相同的函数中
Feeding the output of a function into the same function as a for loop
我已经创建了一个函数来对字符串进行 MD5 散列,现在我想多次重复这个过程,并且每次都从十六进制散列输出中删除一定数量的字符,然后再 're' -散列。在花了很多时间寻找一种方法之后,我研究了 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 个小时研究这个,我学到了很多东西。希望我能做得更好,但真的只需要一些指导。谢谢!
使用循环,并将散列的结果分配给用作 hash()
函数参数的变量。
def hash_n_times(string, n):
for _ in range(n):
string = hash(string)[:-10]
return string
print(hash_n_times("randomstring", 6))
@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]
这是关于 for 循环的 link 到 Python 文档:https://docs.python.org/3/reference/compound_stmts.html#for
祝你好运,希望对你有所帮助:)
我已经创建了一个函数来对字符串进行 MD5 散列,现在我想多次重复这个过程,并且每次都从十六进制散列输出中删除一定数量的字符,然后再 're' -散列。在花了很多时间寻找一种方法之后,我研究了 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 个小时研究这个,我学到了很多东西。希望我能做得更好,但真的只需要一些指导。谢谢!
使用循环,并将散列的结果分配给用作 hash()
函数参数的变量。
def hash_n_times(string, n):
for _ in range(n):
string = hash(string)[:-10]
return string
print(hash_n_times("randomstring", 6))
@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]
这是关于 for 循环的 link 到 Python 文档:https://docs.python.org/3/reference/compound_stmts.html#for
祝你好运,希望对你有所帮助:)