python - 如果在函数返回的哈希值中找到子字符串,则 for 循环中的 if 语句停止迭代
问题描述
为了教学目的,我有以下代码正在寻求执行以下操作:
- 函数哈希,接受字符串(比如说“比特币”)并返回一个哈希值。
- for 循环从 0 迭代到一个范围并不断添加“!” 到字符串“比特币”,例如在迭代 1 = 比特币,迭代 2 = 比特币!,迭代 3 = 比特币!!,迭代 4 = 比特币!!!,等等。
- 在每种情况下,都会为字符串找到哈希值(在每次迭代中,由于连接的“!”字符而生成不同的哈希值。
- 我在 for 循环中添加了一个 if 函数,如果值以“00”开头,该函数应该停止并打印散列值。
没有。4 我的代码中断。我尝试了各种方法,但认为我缺少一些非常基本的东西。
测试数据:请使用:“比特币”
预期结果:如果函数 hash 返回的哈希值中有两个前导零,例如以 00 开头,则 for 循环应该停止,它应该打印出 for 循环中的数字 (i) 和实际的哈希值.
import hashlib
def hash(mystring):
hash_object=hashlib.md5(mystring.encode())
print(hash_object.hexdigest())
mystring=input("Enter your transaction details (to hash:")
for i in range(100000000000):
hash(mystring)
mystring=mystring+"!"
if "00" in hash(mystring):
break
print(hash(mystring))
hash(mystring)
我输入“比特币”得到的错误是:
Enter your transaction details (to hash:bitcoin
cd5b1e4947e304476c788cd474fb579a
520e54321f2e9de59aeb0e7ba69a628c
Traceback (most recent call last):
File "C:/Users/testa/Desktop/bitcoin_mine_pythonexample.py", line 14, in <module>
if "00" in hash(mystring):
TypeError: argument of type 'NoneType' is not iterable
>>>
我也试过这个 - 尝试添加一个返回语句并使用稍微不同的方法 - 这是正确的路线吗?
import hashlib
def hash(mystring):
hash_object=hashlib.md5(mystring.encode())
print(hash_object.hexdigest())
if "00" in hash_object:
return 1
else:
return 0
mystring=input("Enter your transaction details (to hash:")
for i in range(100):
hash(mystring)
mystring=mystring+"!"
if hash(mystring)==1":
print("Found")
hash(mystring)
解决方案
几件事。首先,hash
没有返回任何东西,它只是打印结果然后返回None
。通过删除print
并返回哈希值来更改它。
其次,使用" 在字符串中的任何位置"00" in string
查找"00
,而不仅仅是开始。此外,hash
每次迭代主循环调用 3 次。还有一个hash
对循环外部的最终调用,它没有任何作用。
以下应该做你想要的:
def myhash(mystring):
hash_object=hashlib.md5(mystring.encode())
return hash_object.hexdigest()
mystring=input("Enter your transaction details (to hash:")
while True:
hashval = myhash(mystring)
print(hashval)
if hashval.startswith("00"):
break
mystring += "!"
更新:我重命名hash
以myhash
避免覆盖hash
Python 中的内置函数。
推荐阅读
- r - windows10无法正确安装Rtools
- unity3d - Gradle 在 Unity 中构建错误并出现错误无法获取未知属性“unityStreamingAssets”
- java - 在 Spring Boot 中使用模拟存储库测试 void 服务方法?
- javascript - html / css / javascript 悬停文本'字典'
- jenkins - 使用文件参数远程触发 jenkin 作业
- java - 我如何获得输出字符串之类的输出?
- python - 如何获取文本 BeautifulSoup
- django - Django:遍历所有对象填充所有内存
- c++ - 如何编写利用 ADL 的概念
- python - 在 groupby 函数之后找到两列的最大乘积