Python - 如何随着时间的推移增加一个值
Python - How to Increment A Value As Time Passes
我想在这里做一些简单的事情,我想每 5 分钟将成本变量 (100.00) 增加 .01,所以每 5 分钟后我的新 value/variable 应该是 100.01 , 然后是 100.02, 然后是 100.03 等等..
但我不知道如何将它添加到我现有的值中。
这是我到目前为止尝试过的方法,我已将 300 秒减少到 10 秒以加快速度。
import time
import datetime
tracking = time.time()
def values():
global tracking
now = datetime.datetime.now()
cost = 100.00
increase = .01
newvalue = []
for x in range(1,1000):
print(x)
time.sleep(2)
if time.time() - 10 > tracking:
newvalue.append(float(increase))
print(newvalue)
print(now)
tracking = time.time()
values()
感谢任何帮助。
您似乎需要 +=
运算符。这会将 right-hand 值添加到存储在 left-hand 变量中的值。
import time
import datetime
tracking = time.time()
def values():
global tracking
now = datetime.datetime.now()
cost = 100.00
increase = .01
for x in range(1,1000):
print(x)
time.sleep(2)
if time.time() - 10 > tracking:
cost += increase
print('Cost: {}'.format(cost))
print(now)
tracking = time.time()
values()
还有其他问题需要考虑:
- 浮点数不是存储货币值的好方法。因为它们存储的是二进制小数,所以它们不能表示所有的小数。考虑改用
decimal.Decimal
。
- 要跟踪经过的时间,最好使用
time.monotonic
。 datetime.now()
可以在外部进行调整(例如通过 ntpdate),因此您不能假设 datetime.now 的变化代表经过的时间。
- 似乎没有必要将
tracking
存储为全局。
- 在 single-threaded 程序中,值在达到 1000 之前不会退出,这意味着当成本递增时您不能有其他程序逻辑 运行ning。计算成本 on-demand(正如其他人所建议的)将允许您 运行 其他程序逻辑而不仅仅是循环。
试试这个
import time
def increase_value_evrey_t_sec(initail_value, interval, increase_by,stop_after = -1):
counter = 0
values = []
while counter < stop_after or stop_after == -1:
time.sleep(interval)
initail_value += increase_by
print(initail_value)
values.append(initail_value)
counter += 1
increase_value_evrey_t_sec(2,2,3,4)
increase_value_evrey_t_sec(2,2,3,4)
我想在这里做一些简单的事情,我想每 5 分钟将成本变量 (100.00) 增加 .01,所以每 5 分钟后我的新 value/variable 应该是 100.01 , 然后是 100.02, 然后是 100.03 等等..
但我不知道如何将它添加到我现有的值中。 这是我到目前为止尝试过的方法,我已将 300 秒减少到 10 秒以加快速度。
import time
import datetime
tracking = time.time()
def values():
global tracking
now = datetime.datetime.now()
cost = 100.00
increase = .01
newvalue = []
for x in range(1,1000):
print(x)
time.sleep(2)
if time.time() - 10 > tracking:
newvalue.append(float(increase))
print(newvalue)
print(now)
tracking = time.time()
values()
感谢任何帮助。
您似乎需要 +=
运算符。这会将 right-hand 值添加到存储在 left-hand 变量中的值。
import time
import datetime
tracking = time.time()
def values():
global tracking
now = datetime.datetime.now()
cost = 100.00
increase = .01
for x in range(1,1000):
print(x)
time.sleep(2)
if time.time() - 10 > tracking:
cost += increase
print('Cost: {}'.format(cost))
print(now)
tracking = time.time()
values()
还有其他问题需要考虑:
- 浮点数不是存储货币值的好方法。因为它们存储的是二进制小数,所以它们不能表示所有的小数。考虑改用
decimal.Decimal
。 - 要跟踪经过的时间,最好使用
time.monotonic
。datetime.now()
可以在外部进行调整(例如通过 ntpdate),因此您不能假设 datetime.now 的变化代表经过的时间。 - 似乎没有必要将
tracking
存储为全局。 - 在 single-threaded 程序中,值在达到 1000 之前不会退出,这意味着当成本递增时您不能有其他程序逻辑 运行ning。计算成本 on-demand(正如其他人所建议的)将允许您 运行 其他程序逻辑而不仅仅是循环。
试试这个
import time
def increase_value_evrey_t_sec(initail_value, interval, increase_by,stop_after = -1):
counter = 0
values = []
while counter < stop_after or stop_after == -1:
time.sleep(interval)
initail_value += increase_by
print(initail_value)
values.append(initail_value)
counter += 1
increase_value_evrey_t_sec(2,2,3,4)
increase_value_evrey_t_sec(2,2,3,4)