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

时间:2018-11-13 02:17:59

标签: python python-3.x

我正在为自己正在学习的课程编写赌博/骰子游戏程序,每周都会增加新的要求,并且我们必须实施新代码,而无须从根本上改变到目前为止已编写的代码。我遇到的问题是:现在,如果用户退出(通过输入“ 0”作为他们的“ bet”),则他们“ bank”的内容将保存到文本文件中,以便他们稍后可以继续播放具有相同数量的“彩金”。如果用户破产(游戏结束),则下次他们运行该程序时,其银行将重置为默认金额(500美元)。程序启动时,该代码应检查是否存在保存先前播放数据(bank.txt)的文件;如果文件存在,那么bank.txt中的数字就是用户的“ bank”;如果文件不存在,程序将创建该文件,并将500美元添加到用户的银行中。通过在这里和那里进行调整,我得到了部分的代码(例如,用800美元的现金退出,重新启动游戏,它仍然存在),但是我已经花了很长时间了(感到非常沮丧)我只是无法弄清楚我在做什么错。

> `import os
import random
def main():
    intro()
    bank = check_bank()
    show_bank(bank)
    bet = bet_validation(bank)`

那是程序的开始,显然,我似乎无法正确理解的部分在下面...如果我需要发布更多代码,那不是问题,只是其他一切似乎都可以工作正确(以下内容除外)

def check_bank():
    try:
        if os.path.isfile('./bank.txt') == True:
            bank_file = open('bank.txt','r')
            if float(bank_file.readline()) > 0.0:
                bank = float(bank_file.readline())
                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()

任何和所有帮助/建议/提示将不胜感激。启动程序时,我从“ check_bank()”函数收到“ ValueError”异常。如果有必要,我很乐意提供我的其余代码,只是包括了这一点,因为这似乎是我遇到问题的地方。如果可以提供帮助,请告诉我我在做什么错,以及如何纠正它!预先感谢大家!

3 个答案:

答案 0 :(得分:1)

最后破解了!更改了以下代码,然后进行了宾果游戏!

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

答案 1 :(得分:0)

如@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以下时,您将要更新文本文件!

答案 2 :(得分: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