按时间间隔将浮点数导入文本文件并将其写入文本文件时出现问题

Problem Importing and Writing a Float to a Text File on Interval

我正在制作一个 Python 程序来模拟 Zer0 Coin (ZRC) 的股票市场。基本上,程序每 2 秒就会获得一个新的“令牌”,通常在 0.8 到 1.2 左右。 token每次生成一个新的token都会写入Token.txt保存。程序启动时,应该导入使用。

我在编写和导入文本文件时遇到问题,因为它需要以浮点形式编写并以浮点形式导入。我是 Python 中文本文件的新手,所以我把很多文件东西放在一起但没有用。我想知道如何从文本文件导入浮点数。我还需要知道如何每 2 秒用一个新的文本文件编号替换以前的文本文件编号。我尝试这样做,但它一直在数字前写大量空格,以防止下次我 运行 它时将其作为浮点数导入。

它应该能够 运行 多次,使用前一个 运行 的最后一个“令牌”。

Token.py 文件将以 1.0 开始。

ComputerInvest.py 文件

import time
import random
import decimal

userUSD = 0
tokenInterval = 2

def user():
    print('Running as User...\n')
    userUSD = input('USD Input:  ')
    ZRC = int(userUSD)
    print('USD: ' + str(userUSD) + '  is now equal to ZRC: ' + str(ZRC))
    invest(ZRC)

def invest(ZRCl):
    global token
    seconds = int(input('\nRepeat for time (seconds):  '))
    print('Running Investment...\n\n')
    tokenFW = open(r"Token.txt","r+")
    start = time.time()
    while time.time() - start < seconds:
        time.sleep(int(tokenInterval))
        upordown = random.randint(0,5)
        step = float(decimal.Decimal(random.randrange(0,10000))/1000000000)

        if upordown == 1 or upordown == 2:
            token = token + step
        elif upordown == 4 or upordown == 5:
            token = token - step
        elif upordown == 3:
            pass

        ZRCl = ZRCl * token
        ZRCf = format(ZRCl, ".4f")
        tokenFW.truncate(0)
        tokenFW.write(str(token))
        print('Token:  ' + str(token))
        print('New ZRC Amount:  ' + str(ZRCf) + '\n')

    print('Investment End')
    print('Final New ZRC Amount:  ' + ZRCf)
    ZRC = ZRCf
    USD = ZRC
    tokenFW.close()

tokenF = open(r"Token.txt","r")
token = float(tokenF.read())
tokenF.close()
user()

我也是 Whosebug 的新手,所以如果我做错了什么请告诉我。

问题是您在循环中多次写入令牌,而文件仍处于打开状态并由程序使用。我建议使用 with 语句而不是使用文件 close() 方法(提交 changes/writing)。 with 语句将使文件仅在命令完成之前保持打开状态,然后自动关闭并保存。

def invest(ZRCl):
    global token
    seconds = int(input('\nRepeat for time (seconds):  '))
    print('Running Investment...\n\n')
    tokenFW = 'Token.txt'
    start = time.time()
    while time.time() - start < seconds:
        time.sleep(int(tokenInterval))
        upordown = random.randint(0,5)
        step = float(decimal.Decimal(random.randrange(0,10000))/1000000000)

        if upordown == 1 or upordown == 2:
            token = token + step
        elif upordown == 4 or upordown == 5:
            token = token - step
        elif upordown == 3:
            pass

        ZRCl = ZRCl * token
        ZRCf = format(ZRCl, ".4f")
        with open(tokenFW, 'w') as f:
            f.write(str(token))
        print('Token:  ' + str(token))
        print('New ZRC Amount:  ' + str(ZRCf) + '\n')

    print('Investment End')
    print('Final New ZRC Amount:  ' + ZRCf)
    ZRC = ZRCf
    USD = ZRC

with open(r'Token.txt', 'r') as f:
    token = float(f.read())
user()