Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用布尔值将有效但非无效的回文保存到文件时出现问题_Python_Python 2.7_Tkinter - Fatal编程技术网

Python 使用布尔值将有效但非无效的回文保存到文件时出现问题

Python 使用布尔值将有效但非无效的回文保存到文件时出现问题,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我的代码中的spara函数有问题。这是一个回文检查程序,您只能保存有效的回文。我如何解决这个问题?这是我尝试保存有效回文时收到的消息: 第89行,斯巴拉 myFile.write(sparatord+'\n') TypeError:不支持+:“bool”和“str”的操作数类型 #-编码:UTF-8-*- import Tkinter import tkMessageBox main_window = Tkinter.Tk() top_frame = Tkinter.Frame(main

我的代码中的spara函数有问题。这是一个回文检查程序,您只能保存有效的回文。我如何解决这个问题?这是我尝试保存有效回文时收到的消息:

第89行,斯巴拉 myFile.write(sparatord+'\n') TypeError:不支持+:“bool”和“str”的操作数类型

#-编码: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() 
致:

或使用:

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

函数TestPalindrom()返回真/假值,而不是提供给用户的回文。接下来,您尝试将该布尔值写入与连接的文件,\n这是不受支持的操作

必须将函数更改为返回真/假和回文值,如果返回真,则将返回的第二个值保存到文件中


为了更好地连接字符串,请使用format函数,例如:{}\n.format(sparatord)。

您正在尝试写出
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
<代码>如果
已经为您进行了该测试

myFile.write('%s\n'%sparatord)
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'