Python存储&;通过txt文件访问信息

Python存储&;通过txt文件访问信息,python,python-3.x,Python,Python 3.x,我正在为我正在学习的一门课程编写一个赌博/骰子游戏程序,每周都会增加新的要求,我们必须实现新的代码,而不是从根本上改变到目前为止我们编写的代码。我遇到的问题是:现在,如果用户退出(通过输入“0”作为他们的“赌注”),他们的“银行”的内容将保存到一个文本文件中,这样他们以后就可以以相同的“奖金”继续玩了。如果用户破产(游戏结束),下次运行程序时,他们的银行将重置为默认金额(500美元)。当程序启动时,代码应该检查是否存在保存先前播放数据(bank.txt)的文件;如果文件存在,bank.txt中的

我正在为我正在学习的一门课程编写一个赌博/骰子游戏程序,每周都会增加新的要求,我们必须实现新的代码,而不是从根本上改变到目前为止我们编写的代码。我遇到的问题是:现在,如果用户退出(通过输入“0”作为他们的“赌注”),他们的“银行”的内容将保存到一个文本文件中,这样他们以后就可以以相同的“奖金”继续玩了。如果用户破产(游戏结束),下次运行程序时,他们的银行将重置为默认金额(500美元)。当程序启动时,代码应该检查是否存在保存先前播放数据(bank.txt)的文件;如果文件存在,bank.txt中的数字为用户的“银行”;如果该文件不存在,程序将创建该文件并向用户的银行添加500美元。通过在这里和那里调整一些东西,我已经让部分代码正常工作了(例如,在银行里存了800美元退出,重新启动游戏,它仍然在那里),但我已经做了这么久(并且非常沮丧),我就是不知道我在这里做错了什么

> `import os
import random
def main():
    intro()
    bank = check_bank()
    show_bank(bank)
    bet = bet_validation(bank)`
这是节目的开始,很明显,我看不清楚的部分在下面。。。如果我需要发布更多的代码,这不是问题,只是其他一切似乎都正常工作(除了以下内容)


如有任何帮助/建议/提示,将不胜感激。启动程序时,“check_bank()”函数会出现“ValueError”异常。我很乐意提供我的代码的其余部分,如果必要的话,只包括这一部分,因为它似乎是我遇到问题的地方。如果你能帮忙,请让我知道我做错了什么,以及如何纠正它!提前谢谢各位

正如@deHart提到的,例外情况是“无法将字符串转换为浮点”。问题是,您正在读取第一行以检查文本文件,然后读取下一行(空)以设置银行

相反,读取该行并存储到变量。然后,进行比较并根据该变量设置银行-这将修复ValueError

以下是对我有效的修改版本:

def check_bank():
    try:
        if os.path.isfile('./bank.txt') == True:
            bank_file = open('bank.txt','r')
            vault = float(bank_file.readline())
            if vault > 0.0:
                bank = vault
                return bank
            else:
                bank = 500.00
                return bank
        else:
            bank_file = open('bank.txt','w')
            bank_file.write(str(500.0))
            bank = float(bank_file.readline())
            bank_file.close()
            return bank
    except IOError:
        print('IOError in check_bank')
    except ValueError:
        print('ValueError in check_bank')
    except Exception as err:
        print(err,'in check_bank')
    finally:
        bank_file.close()
以下是一些注意事项:

  • 这“修复”了问题,但仍可能抛出ValueError
  • 其他地方可能会介绍这一点,但当银行降至0以下时,您需要更新文本文件
      您不应以纯文本形式存储值。我喜欢用泡菜

      import pickle, os
      
      def check_bank():
          try:
              file_path = './bank.txt'
      
              #ckeck if file exists
              if os.path.isfile(file_path):
                  file_handler = open(file_path,'rb')
                  bank = pickle.load(file_handler)
      
                  return bank
      
              #if the file doesn't exist    
              else:
                  file_handler = open(file_path, 'wb')
                  pickle.dump(500, file_handler)
                  file_handler.close()
                  return 500
          except IOError:
              print("IOError occured")
      
          except EOFError:
              #if the file is empty
              file_handler = open(file_path, 'wb')
              pickle.dump(500, file_handler)
              file_handler.close()
              return 500
      

      终于破解了!改变了下面的代码,宾果

      def check_bank():
      try:
          if os.path.isfile('./bank.txt') == True:
              bank_file = open('bank.txt','r')
              bank = float(bank_file.readline())
              if bank > 0:
                  return bank
              else:
                  bank = 500.0
                  return bank
      

      能否将
      除值错误
      替换为
      除值错误为e
      ,然后
      打印(e)
      ?还是只显示堆栈跟踪?您还混淆了
      else
      分支。“无法将字符串转换为浮点”。。。问题中的“字符串”是“500.0”,请尝试将该字符串保存到对象中,并将其打印出来,以确保它不包含错误的字符。原因
      float('500.0')
      将在100%的情况下工作。干得好!你比我快了大约12分钟!我真的很难过。存在代码以防止银行下注低于0(一旦银行达到0,游戏结束,输入验证以防止玩家下注超过他们在银行的下注)。我真的,真的很感谢你花时间帮我,伙计!这个答案还是很新的,我有点难以理解。。。但我很好奇。我一定会研究你在这里给我看的东西,希望能从中学到一切。
      def check_bank():
      try:
          if os.path.isfile('./bank.txt') == True:
              bank_file = open('bank.txt','r')
              bank = float(bank_file.readline())
              if bank > 0:
                  return bank
              else:
                  bank = 500.0
                  return bank