【问题标题】:How to readlines without having the \n at the end? (python) [duplicate]如何在末尾没有 \n 的情况下读取行? (蟒蛇)[重复]
【发布时间】:2018-05-21 06:28:42
【问题描述】:

在完成我制作的游戏时,我制作了一个保存按钮,用于保存到文件中。当游戏打开时,它将读取文件并将这些行保存为变量。我这样做了,但后来我看到它需要是一个整数,所以我使用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()

如果没有答案,我很乐意你发表评论或回答。

【问题讨论】:

    标签: python backspace readlines


    【解决方案1】:
    In [17]: fff = open('/somefile', 'r')
    
    In [18]: ss = fff.readlines()
    
    In [19]: ss
    Out[19]: ['qqq\n', 'www\n', 'aaa\n']
    
    In [20]: ss = [ww.strip('\n') for ww in ss]
    
    In [21]: ss
    Out[21]: ['qqq', 'www', 'aaa']
    

    【讨论】:

      【解决方案2】:

      首先,你的代码有逻辑错误。

      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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        • 2022-06-21
        • 1970-01-01
        • 2019-04-05
        • 2022-01-01
        • 1970-01-01
        相关资源
        最近更新 更多