Python “中的无序类型”;如果;谓语
错误正是它在tin上所说的:当你给它一个函数和一个字符串时,解释器无法找出哪个更大。这意味着Python “中的无序类型”;如果;谓语,python,python-3.x,Python,Python 3.x,错误正是它在tin上所说的:当你给它一个函数和一个字符串时,解释器无法找出哪个更大。这意味着testAvg是代码中其他地方的函数名。您需要使用任何适当的参数实际调用它,并让它返回正确的值。调用它一次,然后将其保存到一个局部变量,如average\u score=testAvg()(根据需要传递参数)。然后你可以做一个比较。。。但是,您不应该将其他值强制转换为字符串。将它们保留为整数 此外,您应该重新构造代码,以替换重复的else..if块,该块的结构使用elif关键字。您会遇到该错误,因为您通常
testAvg
是代码中其他地方的函数名。您需要使用任何适当的参数实际调用它,并让它返回正确的值。调用它一次,然后将其保存到一个局部变量,如average\u score=testAvg()
(根据需要传递参数)。然后你可以做一个比较。。。但是,您不应该将其他值强制转换为字符串。将它们保留为整数
此外,您应该重新构造代码,以替换重复的else..if
块,该块的结构使用elif
关键字。您会遇到该错误,因为您通常不想比较两种不同类型的对象,在本例中是函数和字符串。首先,修复testAvg,使其成为一个数字而不是一个函数,因为我假设这是您想要比较的。您可能将testAvg设置为一个函数,而不是该函数返回的内容
if (testAvg <= str(100)) and (testAvg >= str(90)):
TypeError: unorderable types: function() <= str()
if(testAvg=str(90))
应该是:
if (testAvg <= str(100)) and (testAvg >= str(90))
if(testAvg=90)
在函数中还有很多可以改进的地方,比如不使用全局变量(而是返回字符串),使用elif
而不是else if
,纠正缩进和条件链接(例如,上面可以写成901)。你可能只是有点粗心,因为代码中有几行类似于这样的内容:
if (testAvg <= 100) and (testAvg >= 90)
您没有将()
添加到函数名testAvg
,因此您得到的是函数本身,而不是其返回值
2.)或者被这样的行误导了:
def testAvg():
return anything
testAvg = anyvalue
def testAvg():
anything
因此,您认为testAvg
是一个简单的变量
3.)或者它发生了一个简单的疏忽,由一个同名函数重新定义了变量testAvg:
def Anyfunction():
anything
testAvg = Anyfunction
在第三种情况下,您必须修复代码。
在前两种情况下,您必须像这样修复代码:
def testAvg():
return anything
testAvg = anyvalue
def testAvg():
anything
if(testAvg=str(90)):
在每个相关行中。错误消息会准确地告诉您出了什么问题。您正在将函数与字符串进行比较
此外,您没有处理一些案例:
-例如,如果输入值介于79.99和80之间,该怎么办?如果是79.995呢?
-如果您得到一个输入>100
或<0
在风格上,你也在做一些可笑的事情。您不应该在函数中声明全局变量,应该向函数传递参数,testAvg
(至少,传入的值)应该是一个浮点数,而不是函数。您应该使用elif
,而不是else:if…
。而且你不应该把事情强加给别人。您应该将浮点数与整数或其他浮点数进行比较。您还使用了分号,这在python中相当笨拙。脚本语言通常省略分号
由于你的期中考试已经结束,这并不能帮助你作弊,这里有一个有效的例子(它有些优化,但如果你通过阅读它并理解它在做什么,你会成为一个更好的程序员。例如,想知道为什么数组中有两个'a'
字符,为什么我使用整数除法)
从系统导入argv
def测定仪等级(测试VG):
如果为0,则应替换所有,否则:如果(…
与elif
s.不相关,但它会使代码更干净。错误消息说testAvg
是函数名,而不是包含数字的变量。什么是testAvg
?您是否在某处声明了名为testAvg
的函数?作为对实际问题的补充:您您可能希望将要检查的平均值作为参数传递给函数,只返回等级而不是设置全局变量。此外,如果您签出elif
语句,您可能可以保存一些缩进级别,而且您不需要这样做,并且在每个if语句之间,您已经知道前面的语句不满足如果>90'A'elif>80'B'etc错误消息说testAvg
是一个函数,而不是一个数字。A.testAvg
是一个函数。B.您确实可以相互比较字符串。事实上,在Python 2中,您可以将字符串与数字进行比较。A.更正了B.我们知道OP询问的是Python3 beca否则将不会有错误,因此Python2是不相关的。