2015-01-06 151 views
-4
def Functional_Output(Validate_Input): 
    try: 
     while '(' in Validate_Input and ')' in Validate_Input: 
      Validate_Output = Validate_Input.count('(') 

      Intake_Input = Validate_Input.find('(') 
      fin = Validate_Input.find(')')+1 

      while Validate_Output > 1: 
       Intake_Input = Validate_Input.find('(', Intake_Input+1) 
       Validate_Output -= 1 

      receive_value = Validate_Input[Intake_Input:fin] 
      receive_input = calcula(receive_value.replace('(', ''). replace(')', '')) 
      Validate_Input = Validate_Input.replace(recieve_value, recieve_input) 

     DisplayAnswer = float(AddFunction(Validate_Input)) 

    except: 
     DisplayAnswer = "Error" 
    return DisplayAnswer 
def AddFunction(Validate_Input): 
    add_selection = Validate_Input.split() 

    while len(add_selection) != 1: 

     for index in range(len(add_selection)): 
      if add_selection[index] == '/': 
       add_selection[index] = str(float(add_selection[index-1])/float(add_selection[index+1])) 
       add_selection.pop(index+1) 
       add_selection.pop(index-1) 
       break 
      elif add_selection[index] == '*': 
       add_selection[index] = str(float(add_selection[index-1]) * float(add_selection[index+1])) 
       add_selection.pop(index+1) 
       add_selection.pop(index-1) 
       break 
     if not '/' in add_selection and not '*' in add_selection: 
      while len(add_selection) !=1: 
       for index in range(len(add_selection)): 
        add_selection[index] = str(float(add_selection[index]) + float(add_selection[index+1])) 

        add_selection.pop(index+1) 
        break 
    return add_selection[0] 

root = tkinter.Tk() 
root.resizable(0, 0) 
root.title("Calculator") 
txtDisplay =tkinter.StringVar() 
operator = "" 
App_Function = Calculator_App(root) 

root.mainloop() 

當我點擊按鈕'9',然後'+',然後'1'時,該條目返回'錯誤'而不是'10'的消息!爲什麼是這樣? 它可能是與addFunction函數和索引有關嗎?爲什麼我的計算器不能計算答案?

+3

請不要進行代碼轉儲,嘗試隔離代碼似乎在做的事情,而不是預期的部分。 –

+0

爲什麼這肯定意味着你可以運行該程序並親自查看?我只是想幫忙! –

+1

這幾乎肯定不是你的錯誤的原因,但只是一個建議:最常見的Python風格是對模塊,函數和變量使用'lower_case_names_with_underscores',並使用CapitolizedNamesWithoutUnderscores作爲類。遵循這個約定會讓其他人更容易閱讀你的代碼。並非所有的標準庫模塊都遵循本指南(有文檔記載,以及[PEP 8](https://www.python.org/dev/peps/pep-0008/)中的許多其他樣式建議,但建議對於新代碼 – Blckknght

回答

0

在您的代碼:

line 98, in Functional_Output DisplayAnswer = float(AddFunction(Validate_Input)) 

調用addFunction返回一個字符串: '8 + 9'; 然後你試圖將這個字符串轉換爲一個浮點數。 它引發了一個ValueError錯誤,cuz字符串不能轉爲浮動。

要解決這個問題,你需要去你調用addFunction,使它返回8 + 9,而不是「8 + 9」,

我覺得你的問題是在這條線:

add_selection[index] = str(float(add_selection[index]) + float(add_selection[index+1])) 

您正在將add_selection [index]轉換爲float,然後轉換爲字符串。嘗試刪除外STR()

編輯:

進一步瞭解的唯一方法是打印檢查這一行:

試着這樣做:

print add_selection[index], add_selection[index+1] 
print type(add_selection[index]),type(add_selection[index+1]) 

EDIT2:

更好地看待您的代碼有兩件事可能會解決您的程序問題。

1)容易破解

AddFunction變化:

return add_selection[0] 

return eval(add_selection[0]) 

由於調用addFunction返回一個'9+1' <type str>,使用eval將評估這10 <type int>。其實你可以刪除整個AddFunction,只需使用DisplayAnswer = float(eval(Validate_Input))。但請注意,這是一個dirty trick and a hack

2)重寫

我注意到,使用的是在add_Components兩者的顯示信息(一個串中的每個按鈕)也可作爲按壓各按鈕時,從而串聯操作者用新的值的值。 operator += self.value

但大多數問題是,您正在處理字符串而不是整數,當您將該按鈕的值設置爲'1'它不同於將它設置爲1時,應該將程序更改爲使用值的正確類型,數字是整數,操作符的字符串。那麼你將不得不重寫你的AddFunction如何與兩個工作。

最後你是operator是一個全局變量,真的不好意思,並可能導致幾個問題的進一步。

+0

不出現同樣的錯誤出現。我同意你的意見,這是導致錯誤 –

+0

打印檢查該行的那一行。 –

+0

我不知道我可以放置哪條線 –