(Python)如果语句逻辑错误

时间:2017-03-21 07:24:33

标签: python debugging if-statement logic

我有一个程序代码来计算输入txt文件的平均值,它会将平均值保存到基线。 当用户第二次执行程序时,它应该计算另一个txt文件的平均值,平均值将比较基线。

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

假设我的第一个值是506,因为它是第一次执行,所以应该运行if语句if baseline_average == "":。问题是,当第二个值为7099时,它高于基线并应与elif infile_memory_average > baseline_average:一起运行,但我的程序每次只运行elif infile_memory_average < baseline_average:。 这里的逻辑错误是什么?

1 个答案:

答案 0 :(得分:0)

从我所看到的情况来看,我认为您需要将baseline_average声明为整数。如果您将其作为字符串读取,则它的值将不同。所以试试这个:

之后:baseline_average = txt_memory_baseline.get()

执行:baseline_average = int(baseline_average)

那是我的猜测。