2014-01-08 38 views
0

我在我的代碼中遇到了spara-funktion問題。這是一個迴文檢查程序,你只能保存有效的迴文。我該如何解決這個問題?這是我收到的時候我嘗試保存一個有效的迴文消息:使用布爾值無法保存有效但無效的文件夾文件

線89,在spara myFile.write(sparatord + '\ n') 類型錯誤:不支持的操作數類型(S)爲+:「布爾'和 '海峽'

#-coding: UTF-8-*-

import Tkinter 
import tkMessageBox 


main_window = Tkinter.Tk() 
top_frame = Tkinter.Frame(main_window, width=100) 
middle_frame = Tkinter.Frame(main_window) 
bottom_frame = Tkinter.Frame(main_window) 
infoLabel = Tkinter.Label(top_frame, height = 7, width=100, text='Skriv in den text du vill kontrollera', font=('courier', 14), bg='purple', fg='black') 
inputEntry = Tkinter.Entry(middle_frame, width = 100, bg='white', font=('arial', 14)) 


def main(): 
    setupGUI() 
    Tkinter.mainloop() 

def setupGUI(): 
    main_window.geometry('500x400') 
    main_window.title('Palindromkollen') 

    Evaluera = Tkinter.Button(bottom_frame, text = 'Evaluera texten', command = testaPalindrom).grid(row=1, column=1) 
    Instruera = Tkinter.Button(bottom_frame, text = 'Instruktioner', command = visaInstruktion).grid(row=2, column=0) 
    Spara = Tkinter.Button(bottom_frame, text = 'Spara palindrom', command= spara).grid(row=3, column=0) 
    Avsluta = Tkinter.Button(bottom_frame, text = 'Avsluta', command = avslutaProgram).grid(row=4, column=0) 


    infoLabel.pack() 
    top_frame.pack() 
    middle_frame.pack() 
    bottom_frame.pack() 
    inputEntry.pack() 


def visaInstruktion(): 
    infoLabel.configure(bg='purple', fg='white', text= 'I detta program kan du skriva in ord eller \n' 
    'fraser för att kolla om de är palindrom. \n\n'' Skriv in ditt önskade ord och välj "Evaluera texten"\n' 
    'Du kan spara dina palindrom genom att klicka på \n' '"Spara palindrom"', font=('courier', 14)) 


def importText(): 
    ordnadText = str(inputEntry.get().encode('UTF-8')) 
    rensa = (',','!','.',' ','?',':') 
    for i in rensa: 
     ordnadText = ordnadText.replace(i, "").lower() 
    return ordnadText 


def testaPalindrom(): 
    userInput = importText() 

    for i in range (0, len(userInput)-1): 
     if userInput[i] != userInput[len(userInput)-1-i]: 
      infoLabel.configure(bg='red', text = 'Näpp, det är inte ett palindrom') 
      palindrom = False 
     else: 
      infoLabel.configure(bg='green', text = 'Japp, det är ett palindrom') 
      palindrom = True 
    return palindrom 


def spara(): 
    sparatord = testaPalindrom() 
    try: 
     if sparatord == True: 
      myFile = open('palindrom.txt', 'a') 
      myFile.write(sparatord + '\n') 
      myFile.close() 
     else: 
      infoLabel.config(text='Det är inte ett palidrom, går ej att spara') 
    except IOError: 
     print 'Ett fel uppstod, kunde inte skriva till fil' 


def avslutaProgram(): 
    if tkMessageBox.askyesno('Avsluta', 'Vill du stänga palindromkontrollen?'): 
     main_window.destroy()  

if __name__ == '__main__': 
    main() 

回答

0
myFile.write(sparatord + '\n') 

到:

myFile.write(str(sparatord) + '\n') 

或使用:

myFile.write('%s\n'%sparatord) 
0

你的功能testaPalindrom()返回True/False值,而不是迴文其提供用戶。接下來,您嘗試將該布爾值寫入文件,並與不支持的操作\ n進行連接。

您必須更改函數以返回True/False和palindrom值,並且如果返回True,則保存到返回第二個值的文件。

要加入字符串更好使用格式函數例如:'{} \ n'.format(sparatord)。

0

您正試圖寫出testaPalindrom()函數的布爾結果。你可能希望寫出來的用戶輸入,而不是:

def spara(): 
    is_palindrome = testaPalindrom() 
    try: 
     if is_palindrome: 
      myFile = open('palindrom.txt', 'a') 
      myFile.write(importText() + '\n') 
      myFile.close() 
     else: 
      infoLabel.config(text='Det är inte ett palidrom, går ej att spara') 
    except IOError: 
     print 'Ett fel uppstod, kunde inte skriva till fil' 

這裏我們保存的importText()的結果,而不是的testaPalindrom()布爾返回值的布爾結果。

請注意,您不需要明確測試is_palindrome == True; if已經確實爲您測試。

+0

謝謝!這是有道理的,我會試試這個! – user3104317