【问题标题】:Python If statement not being exectuted allthough truePython If 语句未执行尽管为真
【发布时间】:2015-09-17 08:26:05
【问题描述】:

我正在编写一些代码,它调用 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()

【问题讨论】:

  • 我可以在这里看到两个ifs。你指的是哪一个?
  • 这里有两个if 语句。你怎么知道if 表达式应该是真的?

标签: python if-statement bitcoin


【解决方案1】:

您正在将 字符串 与整数进行比较:

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 位数字。

【讨论】:

  • 是的,目前它只是为了测试目的,看看代码是否会按照我的意愿运行。
猜你喜欢
  • 2020-08-19
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多