Python If 语句没有被执行,尽管为真
Python If statement not being exectuted allthough true
我正在编写一些代码,它调用 API 来获取最新的比特币块哈希值。我将哈希值转换为十进制,然后希望获取前两位数字并将它们添加到列表中,前提是它们足够小。我添加了一个 if else 语句,您可以看到它是正确的,但它从未执行过,我不知道为什么。我对 python 比较陌生,所以请放轻松。
from __future__ import print_function
import blocktrail, time, csv, sys
class Bit():
def __init__(self, key, secret, net, retry_fail=1, update=10,max_fail=10):
self.hash_list = []
self.seen = set()
self.key = "x"
self.secret = "x"
self.net = "BTC"
self.key = key
self.retry_fail = retry_fail
self.update = update
self.max_fails = max_fail
def connect(self):
return blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')
def run(self):
while True:
if not self.max_fails:
break
try:
client = self.connect()
latest_block = client.block_latest()
except blocktrail.exceptions.MissingEndpoint as e:
self.max_fails -= 1
print("Error: {}\n sleeping for {} second(s) before retrying".format(e.msg, self.retry_fail))
time.sleep(self.retry_fail)
continue
hashc = latest_block['hash']
hashcdec = int(hashc, 16)
strhashcdec = str(hashcdec)
hashcdecn = strhashcdec[0:2]
print(hashcdec)
while True:
if hashcdecn < 100:
self.hash_list.append(hashcdecn)
self.seen.add(hashcdecn)
print(self.hash_list)
else:
print(hashcdecn)
print("number is too big")
sys.exit()
else:
time.sleep(self.update)
Bit("key","secret","net").run()
您正在比较一个 字符串 和一个整数:
strhashcdec = str(hashcdec)
hashcdecn = strhashcdec[0:2]
# ....
if hashcdecn < 100:
整数总是排在 Python 2 中的字符串之前,所以无论 hashcdecn
的值是什么,它总是测试为 大于 整数。首先将您的数字转换回整数:
if int(hashcdecn) < 100:
或者更好的是,首先不要使用字符串:
hashcdec = int(hashc, 16)
hashcdecn = hashcdc % 100
请注意,任一数字 总是 小于 100,因为您在这里只获取了 2 位数字。
我正在编写一些代码,它调用 API 来获取最新的比特币块哈希值。我将哈希值转换为十进制,然后希望获取前两位数字并将它们添加到列表中,前提是它们足够小。我添加了一个 if else 语句,您可以看到它是正确的,但它从未执行过,我不知道为什么。我对 python 比较陌生,所以请放轻松。
from __future__ import print_function
import blocktrail, time, csv, sys
class Bit():
def __init__(self, key, secret, net, retry_fail=1, update=10,max_fail=10):
self.hash_list = []
self.seen = set()
self.key = "x"
self.secret = "x"
self.net = "BTC"
self.key = key
self.retry_fail = retry_fail
self.update = update
self.max_fails = max_fail
def connect(self):
return blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')
def run(self):
while True:
if not self.max_fails:
break
try:
client = self.connect()
latest_block = client.block_latest()
except blocktrail.exceptions.MissingEndpoint as e:
self.max_fails -= 1
print("Error: {}\n sleeping for {} second(s) before retrying".format(e.msg, self.retry_fail))
time.sleep(self.retry_fail)
continue
hashc = latest_block['hash']
hashcdec = int(hashc, 16)
strhashcdec = str(hashcdec)
hashcdecn = strhashcdec[0:2]
print(hashcdec)
while True:
if hashcdecn < 100:
self.hash_list.append(hashcdecn)
self.seen.add(hashcdecn)
print(self.hash_list)
else:
print(hashcdecn)
print("number is too big")
sys.exit()
else:
time.sleep(self.update)
Bit("key","secret","net").run()
您正在比较一个 字符串 和一个整数:
strhashcdec = str(hashcdec)
hashcdecn = strhashcdec[0:2]
# ....
if hashcdecn < 100:
整数总是排在 Python 2 中的字符串之前,所以无论 hashcdecn
的值是什么,它总是测试为 大于 整数。首先将您的数字转换回整数:
if int(hashcdecn) < 100:
或者更好的是,首先不要使用字符串:
hashcdec = int(hashc, 16)
hashcdecn = hashcdc % 100
请注意,任一数字 总是 小于 100,因为您在这里只获取了 2 位数字。