首页 > 解决方案 > TypeError: 'float' object is not iterable 尝试获取 GPA 列表的总和和平均值时

问题描述

我正在研究 GPA 计算器,它几乎完成了,但是这个错误一直在拖我的后腿。我得到 TypeError “TypeError: 'float' object is not iterable”。我知道这可能是由于 gpas 字典中的浮点值,但我不知道如何解决它。我的代码在下面。

def courses():
p = 0
classes = []
while p <= 5:
    name = input('Please enter the name of the class :')
    classes.append(name)
    p += 1
print(classes)
func()


def func():
    g = 0
    score = 0
    gpas = {'A+': 4.0,
        'A': 4.0,
        'B+': 3.7,
        'B': 3.3,
        'B-': 3.0,
        'C+': 2.7,
        'C': 2.3,
        'C-': 2.0,
        'D+': 1.7,
        'D': 1.3,
        'D-': 1.0,
        'F': 0.0,
        }
    while g <= 5:
        grades = []
        grade = input('Enter your letter grade, in order of   class listed :')
        grade = grade.upper()
        grades.append(grade)
        g += 1
        for grade in grades:
            score = sum(gpas[grade])
            return float(score + [grade] for grade in grades) / 6      
    print(score)

培训班()

标签: python

解决方案


我重构了您的代码并添加了一些注释:

def courses():
    p = 0
    classes = []
    while p <= 5:
        name = input('Please enter the name of the class :')
        classes.append(name)
        p += 1
    print(classes)
    avg_grade = func(classes)
    # Print avg_grade with float 2 number
    print('avg_grade: ', "{:.1f}".format(avg_grade))


def func(classes):
    g = 0
    # Changed letter GPA
    gpas = {
        'A+': 4.0,
        'A': 3.7,
        'B+': 3.33,
        'B': 3,
        'B-': 2.7,
        'C+': 2.3,
        'C': 2,
        'C-': 1.7,
        'D+': 1.3,
        'D': 1,
        'D-': 0.7,
        'F': 0.0,
    }

    # List of number grades
    grades = []
    while g < len(classes):
        # Added class name
        grade = input(f'Enter your letter grade of {classes[g]}:')
        grade = grade.upper()
        # Check valid letter grade
        if grade in gpas:
            grades.append(gpas[grade])
            g += 1
        else:
            # Require re-enter valid letter
            valid_letters = ', '.join(gpas.keys())
            print('Please enter a valid letter grade. The valid letters is: ', valid_letters)

    return sum(grades) / len(classes)

courses()

推荐阅读