2012-06-14 3 views
0

, поэтому я создаю температурный преобразователь, и я просто не могу получить его для расчета по Фаренгейту до Цельсия. Он работает, чтобы идти от Цельсия до Фаренгейта, но он не будет конвертировать другой путь. Я не уверен, в чем проблема, вызвав это, я попробовал intvars и stringvars, но никто, кажется, не исправил эту проблему, и я также попробовал инструкции diff if, но его просто не удалось преобразовать из fah в cel. Может кто-нибудь, пожалуйста, помогите мне и скажите мне, что случилось. Вот то, что я есть:Преобразователь температуры Python Tkinter

from Tkinter import* 


def convert(): 
    celTemp = celTempVar.get() 
    fahTemp = fahTempVar.get() 



    if celTempVar.get() != 0.0: 
     celToFah = (celTemp * 9/5 + 32) 
     print celToFah 
     fahTempVar.set(celToFah) 

    elif fahTempVar.get() != 0.0: 
     fahToCel = ((fahTemp - 32) * (5/9)) 
     print fahToCel 
     celTempVar.set(fahToCel) 



def reset(): 
    top = Toplevel(padx=50, pady=50) 
    top.grid() 
    message = Label(top, text = "Reset Complete") 
    button = Button(top, text="OK", command=top.destroy) 

    message.grid(row = 0, padx = 5, pady = 5) 
    button.grid(row = 1, ipadx = 10, ipady = 10, padx = 5, pady = 5) 

    fahTempVar.set(int(0)) 
    celTempVar.set(int(0)) 





###MAIN### 
root = Tk() 
root.title("Temperature Converter") 
mainframe = Frame(root) 
mainframe.grid() 

celTempVar = IntVar() 
celTempVar.set(int(0)) 
fahTempVar = IntVar() 
fahTempVar.set(int(0)) 


titleLabel = Label (mainframe, text = "Celcius/Fahrenheit Temperature", font = ("Arial", 20, "bold"), justify = CENTER) 
titleLabel.grid(row = 1, column = 1, columnspan = 3, pady = 10, padx = 20) 

celLabel = Label (mainframe, text = "Celcius: ", font = ("Arial", 16), fg = "red") 
celLabel.grid(row = 2, column = 1, pady = 10, sticky = NW) 

fahLabel = Label (mainframe, text = "Fahrenheit: ", font = ("Arial", 16), fg = "blue") 
fahLabel.grid(row = 3, column = 1, pady = 10, sticky = NW) 

celEntry = Entry (mainframe, width = 10, bd = 5, textvariable = celTempVar) 
celEntry.grid(row = 2, column = 1, pady = 10, sticky = NW, padx = 125) 


fahEntry = Entry (mainframe, width = 10, bd = 5, textvariable = fahTempVar) 
fahEntry.grid(row = 3, column = 1, pady = 10, sticky = NW, padx = 125) 

convertButton =Button (mainframe, text = "Convert", font = ("Arial", 8, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command = convert) 
convertButton.grid(row = 4, column = 1, ipady = 8, ipadx = 12, pady = 5, sticky = NW, padx = 55) 

resetButton = Button (mainframe, text = "Reset", font = ("Arial", 8, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command = reset) 
resetButton.grid(row = 5, column = 1,ipady = 8, ipadx = 12, pady = 5, sticky = NW) 

root.mainloop() 

ответ

3

Проблема эта линия:

fahToCel = ((fahTemp - 32) * (5/9)) 

Вопрос заключается в том, что 5/9 вычисляется с использованием целочисленного деления (поскольку оба входа в нее целые числа); он оказывается равным 0, который вам не нужен! Существует целая куча возможных исправлений, но самым простым является просто использовать 5.0/9.0, который однозначно имеет дело с делением с плавающей запятой. (Вы можете также изменить направление в обратном направлении, даже если это просто для ясности. Да, в настоящее время он работает, но это связано с тем, что умножение - с поплавковым вводом celTemp - обрабатывается перед делением там.)

+0

OMg большое спасибо. Я застрял в этой проблеме почти три дня, и я бы никогда не получил этого. – user1352461

 Смежные вопросы

  • Нет связанных вопросов^_^