我正在尝试计算字典中的名字数量,以便在等式中使用它们(学生的总分数/数量。)我不断收到错误,告诉我我不能使用操作数'+ =:'使用str和int但我不知道如何将int转换为str或反之以使其工作。
for name in student_marks:
total_marks+=student_marks.get(name)
no_students+=1
avg_mark=total_marks/no_students
答案 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,但要避免可能的麻烦。
您遇到的问题可能是由以下原因造成的:
total_marks
不是整数,字典值是整数,因此您应确保在代码的开头初始化total_marks
。
相反的情况,total_marks
是一个整数,但是dict中的值(或几个值)是字符串。你应该在for循环中添加一行,从string转换为整数,并确保字符串是转换前的数字字符串(你不能通过使用assert或者将字符串'a'转换为整数)尝试/除外。
可以通过更方便的方式重写代码,以捕获一些错误,如下所示:
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)
如果字典值都正确,您可以去:
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)