2017-09-18 137 views
-1

我與編程新手和我有麻煩,此代碼:麻煩與變量(Python)的

def supercalcx(a, b): 
    n = a 
    while a <= b: 
     n = n * a 
     a = a + 1 
    print(n) 

的IDE給我的錯誤:「類型錯誤:無法通過非乘序列-int類型'str'「,但我確定輸入是整數或浮點數,任何人都可以向我解釋問題。謝謝 !

+0

當你調用它時,你傳遞給你的'supercalcx()'函數的參數是什麼?如果您在傳遞變量的情況下不知道,請包含更多代碼。 – Jerrybibo

回答

0

此功能:

>>> def supercalcx(a, b): 
...  n = a 
...  while a <= b: 
...   n = n * a 
...   a = a + 1 
...  print(n) 
... 
>>> supercalcx(2, 4) 
48 
0

您的功能不會將數據類型之間的轉換。這方面的一個非常粗略的方法是做如下如下:

def supercalcx(a,b): 
    n = int(a) 
    a = int(a) 
    b = int(b) 
    while a <= b: 
     n = n * a 
     a = a + 1 
    print(n) 

一對夫婦的建議,以改善你的代碼:

函數應該很少有它內部的print()功能;而是使用return關鍵字。您可以將a = a + 1更改爲a += 1n = n * an *= a。您還可以引入tryexcept這將嘗試執行無論是try下標籤,如果發生拋出由except塊指定一個錯誤,它會再執行任何被except下標籤。稍微改進的版本如下:

def supercalcx(a, b): 
    try: 
     n = int(a) 
     a = int(a) 
     b = int(b) 
    except ValueError: 
     return "Unable to convert to integers!" 
    while a <= b: 
     n *= a 
     a += 1 
    return n 

print(supercalcx("1", 2)) 
print(supercalcx(1, 2)) 
+1

使用'except'沒有特定的錯誤是不好的做法(大部分時間)。用'ValueError'嘗試'except'。 – Jerrybibo

+0

糟糕,忘記了。謝謝! – ecarl

+0

感謝您的回答,但如果我輸入一個浮點值,我該怎麼辦? –