gpt4 book ai didi

python - 使用相同的字符串但附加不同的值在 python 中创建列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:32 24 4
gpt4 key购买 nike

在我问我的问题之前,我只想让你们知道我是 Python 的新手,所以请多多包涵! :)

无论如何这是我的问题:

我正在编写一些有趣的代码,它调用 API 并获取最新的比特币 Nonce 数据。我希望能够在我的代码本身中保存过去的几个 nonce 值。

有人建议我使用列表来做到这一点。我已经这样做了,但是每次出现新的 nonce 值时,它只是替换列表中的原始值,而不是添加新值。

有没有人知道我做错了什么或者是否有更好的选择?

非常感谢! :D

from __future__ import print_function
import blocktrail, time

def code():

client = blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')

latest_block = client.block_latest()

nonce = latest_block['nonce']

blockhash = latest_block['hash']

print(nonce)

noncestr = str(nonce)

noncelist = []
noncelist.append(noncestr);
print(noncelist)
time.sleep(60)

while True:
code()

最佳答案

您在函数中每次都将 noncelist 设置为一个空列表,因此显然您只在其中保留一个值,您将追加到下一行,您需要在函数外部声明该列表并将列表作为参数传递,使用类可能是使列表成为属性的更好方法。

import blocktrail, time
class Bit():
def __init__(self):
self.nonce_list = []
def run(self):
while True:
client = blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')
latest_block = client.block_latest()
nonce = latest_block['nonce']
blockhash = latest_block['hash']
nonce_str = str(nonce)
self.nonce_list.append(nonce_str)
print(self.nonce_list)
time.sleep(60)



Bit().run()

如果你想持续运行代码,你应该将进程守护进程,而且不断调用自身的函数确实不是一个好主意

如果你打算使用一个函数,将列表传入并在函数中循环,只调用一次:

def code(noncelist):
while True:
client = blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')
latest_block = client.block_latest()
nonce = latest_block['nonce']
blockhash = latest_block['hash']
print(nonce)
noncestr = str(nonce)
noncelist.append(noncestr)
print(noncelist)
time.sleep(60)


code([])

如果您只想使用一个集合来跟踪已添加的内容,我创建了一个使用具有多个属性的类的示例,您将需要捕获更多可能的异常:

import blocktrail, time


class Bit():
def __init__(self, key, secret, net, retry_fail=1, update=60,max_fail=10):
self.nonce_list = []
self.seen = set()
self.key = key
self.secret = secret
self.net = net
self.key = key
self.retry_fail = retry_fail
self.update = update
self.max_fails = max_fail

def connect(self):
return blocktrail.APIClient(api_key=self.key, api_secret=self.secret, network=self.net, testnet=False)

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
nonce = latest_block['nonce']
if nonce not in self.seen:
self.nonce_list.append(nonce)
self.seen.add(nonce)
print(self.nonce_list)
time.sleep(self.update)

key,secret 和 net 是必须的,你可以传递其他的或使用默认值:

Bit("key","secret", "net").run()

关于python - 使用相同的字符串但附加不同的值在 python 中创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31453504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com