2010-06-06 159 views
0

我有一個簡單的功能來做簡單的數學運算。如果我使用導入從另一個腳本調用此函數,則不會得到任何輸出。如果我刪除def function,一切工作正常。定義這個函數有什麼問題?我是Python的新手。python簡單功能錯誤?

def calci(a, op, b): 
    if op == '+': 
     c = a + b 
    elif op == '-': 
     c = a-b 
    elif op == '*': 
     c= a*b 
    elif op =='/': 
     if(b == 0): 
      print('can\'t divide') 
      c = a/b 
      print('value is',c) 
      return c 
result = calci(12,'+', 12) 
print(result) 

回答

3

是否要將結果返回給調用函數或打印出來?通過您的程序導致return的唯一途徑是劃分,當您這樣做時,您將永遠達不到print聲明。

如果你想兩者都做,你應該迪登部分:

print('value is',c) 
return c 

...到ifelif語句的水平。不要忘記刪除您的測試代碼(result = calci(...)等)。

的原因是,一旦你的代碼擊中return聲明,這就是它的功能 - 閒來無事就會被執行(並不完全正確,有一個異常處理機制稱爲finally塊是一個例外,但這不是問題)。

添加:既然您只想打印它,請刪除return聲明並註冊print聲明。

+0

我想打印出來,而不是把它的功能,當它din't工作我試圖返回價值! – 2010-06-06 05:38:43

+0

是在最後縮進是米奇,所以它打印NONE,現在它的工作....... – 2010-06-06 05:42:49

3

您在函數結尾處的縮進似乎是錯誤的; printreturn c僅在op == '/'時纔會發生,而如果b == 0只歸於c。最後應該是:

elif op =='/': 
    if(b == 0): 
     print('can\'t divide') # You should probably return here instead of falling through to the assignment 

    c = a/b 


print('value is',c) 
return c 
+0

現在返回太工作了,謝謝.... – 2010-06-06 05:43:21

1

您的函數只返回如果op =='/'。

從這兩行刪除幾個選項卡,它將工作。

def calci(a, op, b): 

    ... 

    print('value is',c) 
    return c 
1

返回部分的壓痕是不正確,它應該是低一個級別。 (我知道這很難形容...... Python的縮進語法的缺陷)

下面是正確的代碼:

def calci(a, op, b): 

    if op == '+': 
     c = a + b 

    elif op == '-': 
     c = a-b 

    elif op == '*': 
     c= a*b 

    elif op =='/': 
     if(b == 0): 
      print('can\'t divide') 
      return 0 

     c = a/b 


    print('value is',c) 
    return c 

result = calci(12,'+', 12) 

print(result)