按时间间隔将浮点数导入文本文件并将其写入文本文件时出现问题
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()
我正在制作一个 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()