2017-09-18 134 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

感谢您的回答,但如果我输入一个浮点值,我该怎么办? –