2017-12-07 2 views
-1

내가 만든 게임을 마치면서 파일로 저장하는 저장 버튼을 만들었습니다. 게임이 열리면 파일을 읽고 해당 행을 변수로 저장합니다. 나는 그렇게하지만 정수가되어야한다는 것을 알기 때문에 int()을 사용한다. 그러나 변수가 "0" 대신 "0\n"이기 때문에 작동하지 않습니다. 나는 다른 많은 질문을 체크했지만, 같은 질문을하지 않거나 대답하지 않습니다.끝에 n을 쓰지 않고 읽는 방법은 무엇입니까? (파이썬)

궁금한데 \n없이 끝까지 readlines()하는 방법이 있습니까? 또는 변수를 자동으로 백 스페이스 할 수있는 방법이 있습니까? 여기 내 코드는 다음과 같습니다.

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() 

답변이 없으면 나는 당신의 의견을 말하고 답합니다.

답변

3

우선, 귀하의 코드는 논리적 인 버그가 있습니다.

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 = [line.rstrip("\n") for line in savedlines] 
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'] 
: 당신은 라인의 끝에서 \n을 제거합니다 다음 줄을 추가해야

savedlines = savedfile.readlines() 

: 선 후

관련 문제