在Python中存储分数

时间:2016-08-23 20:34:39

标签: python python-3.x

到目前为止,我做了一个简短的游戏,你必须猜测有问题的形状区域。到目前为止只有三角形才能正常工作,正确的答案是B进行测试。

我试图通过将用户放入文本文件来存储用户的进度,但是当我调用一个函数来更新分数时,它会覆盖该文件以便删除分数!我怎样才能解决这个问题,如果我还有另外一种方法可以做到这一点,因为我希望用户能够从一个级别转到另一个级别?

我的代码:

User_Points = '0'

def LoginScreen():
    print("Welcome to Area Trainer")
    print("Please enter the username for your account")
    global user_name
    user_name = str(input())
    save = open(user_name + '.txt', 'w')
    save.write(str(User_Points))


    PasswordCheck= True
    while PasswordCheck:
        user_password = input("Type in your password: ")
        if len(user_password) < 8:
            print("Your password must be 8 characters long")
        elif not any(i.isdigit() for i in user_password):
            print("You need a number in your password")
        elif not any(i.isupper() for i in user_password):
            print("You need a capital letter in your password")
        elif not any(i.islower() for i in user_password):
            print("You need a lowercase letter in your password")
        else:
            PasswordCheck = False


def MenuTriangle():
    global User_Points
    User_Points = ''
    print('''Here is a triangle with a height of 12 cm and a width of 29 cm
    /\     |                *Not to scale.
   /  \    |
  /    \   | 12 cm
 /      \  |
 <------->
    29 cm
    You must find out the area and select the correct answer from these options''')
    print('''A) 175
        B) 174
        C) 2000
        D) 199

           ''')
    user_input = input().upper()

    if user_input == "A":
            print("I'm sorry this is incorrect, but you still have a chance to get 1 point!")
            MenuTriangle2()

    elif user_input == "C":
            print("I'm sorry this is incorrect, but you still have a chance to get 1 point!")
            MenuTriangle2()

    elif user_input == "D":
            print("I'm sorry this is incorrect, but you still have a chance to get 1 point!")
            MenuTriangle2()

    elif user_input == "B":
            print("Congratulations! You got it right; someone's a smart cookie. Here have two points!")
            reading = open(user_name + '.txt')
            score = reading.read()
            score = score + '2'
            print("Your score is", score)
            save = open(user_name + '.txt', 'a')
            save.write(str(score))
            MenuStart()

def MenuStart():

    print("Welcome to the mathematical area game!")
    print("In this game you will be required to calculate the area of multiple shapes.")
    print("To do this you must know how to calculate the area of different shapes with increasing difficulty.")
    print('''Please select a shape you want to play,
    A) Triangle
    B) Square
    C) Circle''')
    user_input = input().upper()

    if user_input == "A":
        print("You have chosen to calculate the area of a triangle!")
        MenuTriangle()

    elif user_input == "B":
        print("You have chosen to calculate the area of a square!")
        MenuSquare()

    elif user_input == "C":
        print("You have chosen the calculate the area of a circle!")
        MenuCircle()

    else:
        print("Oops! I didn't understand that >:")
        MenuStart()


LoginScreen()
MenuStart()

2 个答案:

答案 0 :(得分:2)

你在这里做的补充

score = reading.read()
score = score + '2'

属于type str,因此您不断获得024等值,请先将文件中的值更改为int

    score = int(score) + '2'

同时以w+模式

打开文件
save = open(user_name + '.txt', 'w+')

或使用其他人推荐的with

答案 1 :(得分:1)

由于您从不关闭文件,因此无法保存。这就是为什么大多数人同意with open(filename, 'w+')是最佳做法。

尝试使用以下格式LoginScreen()

def LoginScreen():
    print("Welcome to Area Trainer")
    print("Please enter the username for your account")
    global user_name
    user_name = str(input())
    with open(user_name + '.txt', 'w') as f:
        f.write(str(User_Points))

    # Remaining code below here...

我还注意到在MenuTriangle()结束时你尝试将字符串加在一起而不是添加整数。在增加分数之前,您希望将从文件中读取的字符串转换为整数。您也没有提供打开所需文件的模式。它默认为'r',但最好是明确的。

def MenuTriangle():

    # if: ...
    # elif: ...
    # elif: ...

    elif user_input == "B":
        print("Congratulations! You got it right, someone's a smart cookie. Here have two points!")

        with open(user_name + '.txt', 'r') as f:
            score = f.read()
            new_score = int(score) + 2
            print("Your score is {}".format(new_score))

        with open(user_name + '.txt', 'w+') as w:  # Wouldn't you want to overwrite this rather than continue appending numbers?
            w.write(str(new_score))

        MenuStart()  # Call this outside of your with statements so that the file closes