Как читать строки без \n в конце? (питон)

Когда я заканчивал игру, которую я сделал, я сделал кнопку сохранения, которая сохраняет в файл. Когда игра откроется, она прочитает файл и сохранит эти строки как переменные. Я так и делаю, но потом вижу, что это должно быть целое число, поэтому использую int(). Но тогда это не работает, потому что переменная "0\n" вместо "0". Я проверил много других вопросов, но они не задают и не отвечают на тот же вопрос.

Поэтому мне интересно, есть ли способ readlines() без \n в конце? Или есть способ автоматически вернуть переменную назад? Вот мой код:

import tkinter as tk
from PIL import Image, ImageTk

# --- functions ---
def eggvalue_change():
    global eggvalue, eggvalueupgrade, money, eggz
    if money > int(round(eggvalueupgrade)):
        eggz -= eggvalueupgrade / eggvalue
        eggvalue+=0.2
        eggvalueupgrade += int(round(eggvalueupgrade + (eggvalueupgrade / 7)))
def moar_eggz():
    global eggzps, chookz
    chookz += 1
def saving():
    savedfile.write(money)
    savedfile.write(eggvalueupgrade)
    savedfile.write(eggzps)
    savedfile.write(chookz)
    savedfile.write(eggvalue)
    savedfile.write(eggz)
def main_loop():
    global eggz, eggzps, money
    eggzps = chookz / 100.0
    money = eggz * eggvalue

    try:
        openbutton2.config( text="Egg Value: " + str(eggvalue) + " --> " + str(eggvalue+0.2) + " ($" + str(eggvalueupgrade) + ")", command=eggvalue_change)
        label2.config(text="Money: $" + str(int(round(money))), font=("Terminal", 50), borderwidth=5, relief="ridge", bg="black", foreground="white",pady=10, padx=498)
        if eggzps >= 10:
            label1.config(text="| Chickens: " + str(chookz)+" | Eggs: " + str(int(round(eggz)))+" | Eggs Per Second: " + str(int(round(eggzps)))+" | Egg Value: $" + str(eggvalue) + " |", font=("Terminal", 20), borderwidth=4, relief="ridge", bg="black", foreground="red",pady=10, padx=498)
        elif eggzps < 10:
            label1.config(text="| Chickens: " + str(chookz)+" | Eggs: " + str(int(round(eggz)))+" | Eggs Per Second: " + str(eggzps)+" | Egg Value: $" + str(eggvalue)+ " |", font=("Terminal", 20), borderwidth=4, relief="ridge", bg="black", foreground="red",pady=10, padx=498)
        if money < int(round(eggvalueupgrade)):
            openbutton2.config(fg="gray")
        elif money > int(round(eggvalueupgrade)):
            openbutton2.config(fg="white")
    except Exception as e: 
        print(e) # display exception to see problem
    root.after(20, main_loop)
def update_eggz():
    global eggz
    try:
        eggz += eggzps
    except Exception as e:
        print(e) # display exception to see problem

    # repeat it after 1000ms
    root.after(1000, update_eggz)

# --- main ---

root = tk.Tk()
root.title("Chicken Clicker")

savedfile = open("savedata\\mainsave.txt", "a+")
savedlines = savedfile.readlines()
print savedlines


if savedlines == []:
    eggz = 0
    eggvalue = 0.2
    chookz = 0
    eggzps = 0.0
    eggvalueupgrade = 100
    money = eggz * eggvalue

eggz = int(savedlines[0])
eggvalue = int(savedlines[1])
chookz = int(savedlines[2])
eggzps = int(savedlines[3])
eggvalueupgrade = int(savedlines[4])
money = int(savedlines[5])

savedfile.close()

# empty labels - `update_labels` will add text  

label2 = tk.Label(root)
label1 = tk.Label(root)

label2.pack()
label1.pack()

chickencnv = Image.open("img\\1.png")
chicken = ImageTk.PhotoImage(chickencnv)
openbutton3 =tk.Button(root, bg="black", fg="white", font=("Terminal", 13), command=saving)
openbutton2= tk.Button(root, bg="black", fg="gray", font=("Terminal", 15))
openbutton1= tk.Button(root, image=chicken, width=500, height=500, command=moar_eggz, bg="black")

openbutton1.pack()
openbutton2.pack()
openbutton3.pack()


# run it first time at once
update_eggz()
main_loop()


root.mainloop()

Если нет ответа, я согласен с тем, что вы комментируете или отвечаете на это.


person Anonymous    schedule 07.12.2017    source источник


Ответы (1)


Во-первых, в вашем коде есть логическая ошибка.

if savedlines == []:
    eggz = 0
    eggvalue = 0.2
    chookz = 0
    eggzps = 0.0
    eggvalueupgrade = 100
    money = eggz * eggvalue

eggz = int(savedlines[0])
eggvalue = int(savedlines[1])
chookz = int(savedlines[2])
eggzps = int(savedlines[3])
eggvalueupgrade = int(savedlines[4])
money = int(savedlines[5])

Вы проверяете, является ли savedlines пустым списком, и соответственно устанавливаете некоторые значения. Но, если это правда, следующие строки не будут работать с IndexError, так как ваш список пуст. Вам нужно изменить это на:

if savedlines == []:
    eggz = 0
    eggvalue = 0.2
    chookz = 0
    eggzps = 0.0
    eggvalueupgrade = 100
    money = eggz * eggvalue
else:
    eggz = int(savedlines[0])
    eggvalue = int(savedlines[1])
    chookz = int(savedlines[2])
    eggzps = int(savedlines[3])
    eggvalueupgrade = int(savedlines[4])
    money = int(savedlines[5])

Теперь, чтобы решить вопрос. После строки:

savedlines = savedfile.readlines()

Вы должны добавить следующую строку, которая удалит \n с конца строк:

savedlines = [line.rstrip("\n") for line in savedlines]
person Fejs    schedule 07.12.2017