如何将str转换为int以便对值进行求和?

时间:2017-03-15 19:49:22

标签: python dictionary

我正在尝试计算字典中的名字数量,以便在等式中使用它们(学生的总分数/数量。)我不断收到错误,告诉我我不能使用操作数'+ =:'使用str和int但我不知道如何将int转换为str或反之以使其工作。

for name in student_marks:
        total_marks+=student_marks.get(name)
        no_students+=1

avg_mark=total_marks/no_students

6 个答案:

答案 0 :(得分:0)

没有看到student_marks的结构,我只能猜测,但......

for name, grade in student_marks.iteritems():
    total_marks += int(grade)
    no_students += 1

avg_mark = total_marks/no_students

答案 1 :(得分:0)

可替换地:

scores = map(int, student_marks.values())
avg_mark = sum(scores)/len(scores)

如果您修改dict以获得整数值,则可以删除map(int, ...)

scores = student_marks.values()
avg_mark = sum(scores)/len(scores)

示例:

>>> student_marks = {"John": "83", "Bob": "21", "Henry": "100"}
>>> scores = map(int, student_marks.values())
>>> avg_mark = sum(scores)/len(scores)
>>> avg_mark
68

答案 2 :(得分:0)

在字典中,没有必要将字符串作为键和值。键值对可以由字符串和整数

组成
student_marks = {
    'student1': 80,
    'student2': 95
}

total_marks = 0
no_students = 0

for name in student_marks:
    total_marks += student_marks.get(name)
    no_students += 1

答案 3 :(得分:0)

您的代码按原样运行。至少我有样本字典。 student_marks.get(name)将学生标记为int.unless,您将其定义为str。在这种情况下,您需要将这些转换为int.

您定义了以下内容吗?

total_marks = 0
no_students = 0

修改
使用字符串值而不是int更新了dict。

您的代码带有样本字典:

    student_marks = {'student1' : '89', 'student2' : '65','student3' : '94'}
total_marks = 0
no_students = 0

for name in student_marks:
        total_marks+=int(student_marks.get(name))        
        no_students+=1

avg_mark=total_marks/no_students
print avg_mark

结果:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
82
>>> 

答案 4 :(得分:0)

我假设dict结构如下:

student_marks={'s1':10, 's2':9,...}
or
students_marks={'s1':'10', 's2':'9',...}

或两者兼而有之,在这种情况下,你应该尽可能地与你在字典中使用的类型一致,而不是python会关心它只会向你抛出TypeError,但要避免可能的麻烦。

您遇到的问题可能是由以下原因造成的:

  1. total_marks不是整数,字典值是整数,因此您应确保在代码的开头初始化total_marks

  2. 相反的情况,total_marks是一个整数,但是dict中的值(或几个值)是字符串。你应该在for循环中添加一行,从string转换为整数,并确保字符串是转换前的数字字符串(你不能通过使用assert或者将字符串'a'转换为整数)尝试/除外。

  3. 可以通过更方便的方式重写代码,以捕获一些错误,如下所示:

    students_marks={'a':10, 'b':9, 'c':5,...}
    total_marks=0
    
    #this loop iterates over the keys(in this case the students names) in the dictionary
    for name in students_marks.keys():
        try:
            total_marks+= int(student_marks[name])
            #alternatively
            #total_marks+= int(student_marks.get(name,0))
        except:
            #this line will print out the incorrect entry in the dictionary.
            print('Student {} marks are incorrect, {}'.format(name, student_marks[name]))
    
    average_marks=total_marks/len(students_marks)
    
  4. 如果字典值都正确,您可以去:

        total_marks=sum(student_marks.values())
        number_of_students=len(students_marks)
        average_marks=total_marks/number_of_students
    

    您也可以在一行中填写以前的代码,具体取决于您的代码需要什么。

答案 5 :(得分:-1)

总结所有学生的价值/数量

 sum(map( int, student_marks.values()) )/len(student_marks)