2014-01-08 37 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