def determineLetterGrade():
global letterGrade, testAvg;
if (testAvg <= str(100)) and (testAvg >= str(90)):
letterGrade = "A";
else:
if (testAvg <= 89.99) and (testAvg >= 87):
letterGrade = "B+";
else:
if (testAvg <= 86.99) and (testAvg >= 80):
letterGrade = "B";
else:
if (testAvg <= 79.99) and (testAvg >= 77):
letterGrade = "C+";
else:
if (testAvg <= 76.99) and (testAvg >= 70):
letterGrade = "C";
else:
if (testAvg <= 69.99) and (testAvg >= 67):
letterGrade = "D+";
else:
if (testAvg <= 66.99) and (testAvg >= 60):
letterGrade = "D";
else:
if (testAvg <= 59.99) and (testAvg >= 0):
letterGrade = "F"
# end determineLetterGrade function
中期项目,创建函数,这是函数determineLetterGrade
。使用if
语句确定测试平均值的字母等级。当我去运行它时,我收到一条错误消息:
if (testAvg <= str(100)) and (testAvg >= str(90)):
TypeError: unorderable types: function() <= str()
答案 0 :(得分:0)
错误就像它在锡上所说的那样:解释器无法确定当你将函数和字符串交给它时哪个更大。这意味着testAvg
是代码中其他位置的函数的名称。您需要使用任何适当的参数实际调用它,并使其return
具有正确的值。调用一次,然后将其保存到像average_score = testAvg()
这样的局部变量(根据需要传递参数)。然后,您可以进行比较......但是您不应该将其他值转换为字符串。将它们保留为整数。
此外,您应该重新构建代码,以使用else..if
关键字的结构替换重复的elif
块。
答案 1 :(得分:0)
您收到该错误是因为您通常不想比较两种不同类型的对象,在本例中是函数和字符串。首先,修复testAvg,使其成为一个数字而不是一个函数,因为我认为这是你想要比较的。您可能将testAvg设置为函数而不是该函数返回的函数。
if (testAvg <= str(100)) and (testAvg >= str(90))
应该是:
if (testAvg <= 100) and (testAvg >= 90)
在你的函数中还有很多东西可以改进,例如不使用全局变量(改为返回字符串),而是使用elif
代替else if
,纠正缩进和条件链接(例如上面可以写成90 <= testAvg <= 100
)。但这应该解决你的特定问题。
答案 2 :(得分:0)
1。)你可能只是有点粗心,因为在你的代码中有一些这样的行:
def testAvg():
return anything
并且您错过了将()
添加到函数名称testAvg
,因此您获得函数本身而不是其返回值。< / p>
2。)或被这样的一些行误导:
def Anyfunction():
anything
testAvg = Anyfunction
因此您认为testAvg
是一个简单的变量。
3。)或者它发生了一个简单的粗略重新定义变量testAvg由一个具有相同名称的函数:
testAvg = anyvalue
def testAvg():
anything
在第三种情况下,您必须修复代码。 在前两种情况下,您必须像这样修复代码:
if (testAvg <= str(100)) and (testAvg() >= str(90)):
在每一个相关的行中。
答案 3 :(得分:0)
错误消息告诉您究竟出了什么问题。您正在将函数与字符串进行比较。
此外,您还没有处理以下几种情况:
- 例如,如果输入值介于79.99和80之间怎么办?如果它是79.995怎么办?
- 如果您收到输入> 100
或< 0
从风格上讲,你也在做一些荒谬的事情。你不应该在函数中声明全局变量,你应该将参数传递给函数,而testAvg
(至少,你传入的值)应该是一个浮点数,而不是一个函数。您应该使用elif
,而不是else: if ...
。你不应该把东西扔到字符串上。您应该将浮点数与int或其他浮点数进行比较。你也使用分号,这在python中相当不错。脚本语言通常省略分号。
由于你的期中已经结束,这不能帮助你作弊,这是一个有效的例子(它有点优化,但是如果你通过阅读并理解它在做什么,你将成为一个更好的程序员例如,想知道为什么该数组中有两个'A'
个字符,以及为什么我使用整数除法。
from sys import argv
def determineLetterGrade(testAvg):
if 0 <= testAvg and testAvg <= 100:
grade_range = int(testAvg // 10)
if grade_range < 6:
grade = 'F'
else:
grade = 'DCBAA'[grade_range - 6]
if grade != 'A' and (testAvg % 10) >= 7:
grade += '+'
return grade
else:
raise Exception("Grade out of range")
if __name__ == '__main__':
print determineLetterGrade(float(argv[1]))
在决赛中,传球记录...... 你的成绩计算有点不稳定。我在上面使用它,但在大多数等级系统中加上'+',它也可以得到' - '。