我想创建简单的代码来测试数字是奇数还是偶数。
我正在使用Python 2.7.3
。
def oddoreven(a):
try: int(a)
except: return "Error"
if a%2==0: return 1
else: return 0
相反,代码失败并显示错误:TypeError: not all arguments converted during string formatting.
错误指向以if a%2==0...
开头的行。
在研究这个问题时,我发现了一些例子,表明这样的代码应该可行。例如,此问题的答案提供与解决方案类似的代码:python - checking odd/even numbers and changing outputs on number size
我的代码出了什么问题?
答案 0 :(得分:3)
int
函数无法就地更改a
,您需要将其分配给a
:
>>> def oddoreven(a):
... try: a=int(a)
... except: return "Error"
... if a%2==0: return 1
... else: return 0
...
>>> oddoreven('2')
1
>>> oddoreven('5')
0
>>> oddoreven('a')
'Error'
答案 1 :(得分:3)
这是因为您首先测试a
是否可以转换为int
(这很好),但是您忽略了此测试并继续使用您在参数中提供的string
Python是动态类型语言,但强类型,这意味着您可以在声明变量后更改变量的类型,但此更改必须是显式(more about this here)。
在您的情况下,如果if a % 2 == 0
是字符串,则表示您无法a
。
你可以这样做:
def oddoreven(a):
try:
my_int = int(a)
except TypeError:
return "The argument provided could not be converted into an int"
if my_int % 2 == 0:
return 1
else:
return 0
答案 2 :(得分:1)
正如user2357112所述。 (int)a不将a转换为int。所以当你检查它的模数时,你仍然必须转换它。
def oddoreven(a):
try: int(a)
except: return "Error"
if int(a)%2==0: return 1
else: return 0
print oddoreven(32)
工作正常。
作为旁注,通常不赞成任何例外。您可能希望缩小范围,如:
def oddoreven(a):
try: int(a)
except TypeError: return "Error"
if int(a)%2==0: return 1
else: return 0
print oddoreven(32)