【问题标题】:TypeError: '>=' not supported between instances of 'list' and 'int'TypeError:“list”和“int”的实例之间不支持“>=”
【发布时间】:2017-04-14 09:43:01
【问题描述】:

您好,我遇到了上述错误。 最后一个函数“get_student_average”出现了问题。 如果“results”存储了“get_average(student)”的值,为什么它不能给我返回“get_letter_grade(results)”的结果??

lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
}
alice = {
    "name": "Alice",
    "homework": [100.0, 97.0, 98.0, 100.0],
    "quizzes": [98.0, 99.0, 99.0],
    "tests": [100.0, 100.0]
}
tyler = {
    "name": "Tyler",
    "homework": [0.0, 35.0, 45.0, 22.0],
    "quizzes": [0.0, 60.0, 58.0],
    "tests": [65.0, 58.0]
}
students = [lloyd,alice,tyler]
def average(numbers):
    total= sum(numbers)
    total = float(total)
    return total / len(numbers) 

def get_average(student):
    homework= average(student["homework"])
    quizzes= average(student["quizzes"])
    tests= average(student["tests"])
    return 0.1 * homework + 0.3 * quizzes + 0.6 * tests

def get_letter_grade(score):
    if score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    elif score >= 70:
        return "C"
    elif score >= 60:
        return "D"
    else:
        return "F"

def get_student_average(gruppo):
    for student in gruppo:
        results= []
        results.append(get_average(student))
        print (student["name"])
        print (results)
        print (get_letter_grade(results))

get_student_average(students)

【问题讨论】:

  • 您将参数results(一个列表)传递给方法get_letter_grade,它需要一个数值
  • 是的,我理解,但我在该列表中有一个数值。那么我该如何解决呢?也许在调用函数“get_letter_grade”之前转换这个值?怎么样?

标签: python python-3.x


【解决方案1】:

我认为您对最后一个打印语句的意图是为每次迭代打印学生的字母成绩。为此,您应该将当前学生的结果传递给 get_average 函数,而不是当前运行的结果列表:

def get_student_average(gruppo):
    for student in gruppo:
        results= []
        result = get_average(student)
        results.append(result)
        print (student["name"])
        print (result)
        print (get_letter_grade(result))

get_student_average(students)

看看这是否适合你。

【讨论】:

  • 是的,谢谢,所以我不再需要结果了。但我不明白一件事。在 foo 循环中,“结果”得到我感兴趣的值,但是,在任何学生(循环)中,它得到的值不是多于一个吗?
  • 不客气。请接受这个答案,让其他人知道它适用于这个问题。
  • @Max result 是一个变量,用于存储get_average 函数的输出,该函数只返回一个值。 get_average 接受student 字典,从中计算平均homeworkquizzestests 分数,即基于学生字典的homeworkquizzestests 列表的3 个值价值观。然后,该函数根据表达式 0.1 * homework + 0.3 * quizzes + 0.6 * tests 返回这 3 个值中的一个值。
【解决方案2】:

get_student_average() 中,您将results 声明为列表,然后将其传递给get_letter_grade()。 然后get_letter_grade() 将列表与TypeError 来自的数字进行比较。你一定要发送get_letter_grade()一个int。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2022-07-03
    • 1970-01-01
    • 2020-09-07
    • 2020-11-13
    • 2021-01-15
    相关资源
    最近更新 更多