2017-03-21 5 views
-2

Ich habe einen Programmcode, um den Durchschnitt der Eingabe TXT-Datei zu berechnen, und es wird den Durchschnittswert zu Baseline speichern. Wenn der Benutzer das Programm zum zweiten Mal ausführt, sollte er einen anderen Durchschnitt der txt-Datei berechnen, der Durchschnitt vergleicht die Grundlinie.(Python) Wenn Anweisung Logik Fehler

def memory_baselineValues(): 
memory_txtfile = file_memory_locat.get() ### Enter txt file name 
infile = open(memory_txtfile, 'r') 
stuff = infile.readlines() 
infile_memory_average = (int(stuff[3]) + int(stuff[13]) + int(stuff[23]) + int(stuff[33]) + int(stuff[43]) + int(stuff[53]) + int(stuff[63]) + int(stuff[73]) + int(stuff[83]) + int(stuff[93]))/10 ###calculate the average of txt file values 
average_memory.insert(INSERT, infile_memory_average) ### output the average of txt file values 
baseline_average = txt_memory_baseline.get() 
if baseline_average == "": ###Check the textbox "txt_memory_baseline" values is null or not null, first time execute should null 
    baseline_average = infile_memory_average 
    txt_memory_baseline.insert(INSERT, baseline_average) ### add the first time execute average values to textbox 
    var = tkMessageBox.showinfo("Alert", "Test") 
    exit 
elif infile_memory_average > baseline_average: 
    var = tkMessageBox.showinfo("Alert", "The average values of "+memory_txtfile+" is over the baseline") 
    read_average = infile_memory_average 
    before_baseline = int(baseline_average) 
    baseline_average = (read_average + before_baseline)/2 ###update baseline 
    txt_memory_baseline.delete(0, END) 
    txt_memory_baseline.insert(INSERT, baseline_average) 
    exit 
elif infile_memory_average < baseline_average: 
    var = tkMessageBox.showinfo("Alert", "Safe") 
    read_average = infile_memory_average 
    before_baseline = int(baseline_average) 
    baseline_average = (read_average + before_baseline)/2 ###update baseline 
    txt_memory_baseline.delete(0, END) 
    txt_memory_baseline.insert(INSERT, baseline_average) 

    exit 
else: 
    print"Somethings wrong" 
print "done" 
infile.close() 

Angenommen, mein erster Wert 506 ist, da es erstmals ausführen, sollte die if-Anweisung if baseline_average == "": ausgeführt werden. Das Problem ist, wenn der zweite Wert 7099 ist, ist es höher als die Grundlinie und sollte mit elif infile_memory_average > baseline_average: ausgeführt werden, aber mein Programm wird nur elif infile_memory_average < baseline_average: immer ausgeführt. Was ist der logische Fehler hier?

+0

Was soll "Durchschnitt einer txt-Datei" bedeuten? – timgeb

+0

Setzen Sie einen Haltepunkt kurz vor elif infile_memory_average> baseline_average: und überprüfen Sie beide Werte für die zweite Ausführung. –

+0

http://stackoverflow.com/questions/3270680/how-does-python-compare-string-and-int – Lafexlos

Antwort

0

Von was ich sehen kann, ich denke, Sie müssen Ihr baseline_average als eine ganze Zahl deklarieren. Wenn Sie es stattdessen als eine Zeichenfolge lesen, wird der Wert davon anders sein. so versuchen Sie dies:

nach: baseline_average = txt_memory_baseline.get()

tun: baseline_average = int (baseline_average)

Das ist meine Vermutung wäre.