如果用户提供无效输入,我希望我的函数再次使用递归运行,但是当代码运行时我收到错误:
> TypeError: 'str' object is not callable.
这是我的代码。
y = 'yes'
y1 ='Yes'
y2 = 'y'
y3 = 'Y'
def triangle():
triangle = raw_input('Is the triangle a 45-45-90 or a 30-60-90? ')
if triangle == y:
print 'yes'
elif triangle == y1:
print 'yes'
elif triangle == y2:
print 'yes'
elif triangle == y3:
print 'yes'
else:
print 'you must enter '+ y +' or ' + y1 + ' or ' + y + ' or ' + y3
triangle()
答案 0 :(得分:2)
由于Python是一种动态语言,因此您可以将变量类型从一个变量重新分配给另一个变量 - 在这种情况下,无意中重新分配。
当您使用相等的=
符号设置变量时,您实际上不仅要分配值,还要分配推断类型。
这个小测试可以显示动态变化的变量类型:
i = 1
type(i) ## int
i = "s"
type(i) ## str
要了解有关动态特性以及变量赋值如何更改变量类型的更多信息,请参阅以下链接: http://www.python-course.eu/variables.php
这是流程
triangle
triangle
,这是一个str else
块执行时,它会出错,因为triangle
现在是一个str而不再是对函数triangle()
的引用这是一个很好的编码实践,可以将变量命名为它们包含的内容 - 在这种情况下,用户响应;
变量名称的微小变化使您的程序工作:)
import math
y = 'yes'
y1 ='Yes'
y2 = 'y'
y3 = 'Y'
def triangle():
response = raw_input('Is the triangle a 45-45-90 or a 30-60-90? ')
if response == y:
print 'yes'
elif response == y1:
print 'yes'
elif response == y2:
print 'yes'
elif response == y3:
print 'yes'
else:
print 'you must enter '+ y +' or ' + y1 + ' or ' + y + ' or ' + y3
triangle()
if __name__ == "__main__":
triangle()
加成:
您可以使用in
使if / else块更简单,因为您的响应始终相同(打印'是'并退出程序):
if response in (y, y1, y2, y3):
print 'yes'
希望这有帮助!
答案 1 :(得分:0)
您创建了一个名为triangle
的字符串输入,它也是您的函数的名称。的小心!强>
答案 2 :(得分:0)
您已将triangle
分配给raw_input()
,这会覆盖您的功能声明;因此,您正在呼叫'myinput'()
,而不是triangle()
。要解决此问题,只需更改功能名称或raw_input()
变量分配。