我的if-else语句有什么问题?

时间:2016-01-16 23:52:37

标签: python if-statement

我编写代码来查找给定数据的平均值。我没有得到理想的输出,我不知道出了什么问题。

以下是代码:

student_1 = raw_input().split()
student_2 = raw_input().split()
student_3 = raw_input().split()
rec_1 = {'name' : student_1[0], 'math' : int(student_1[1]), 'physics' :    int(student_1[2]), 'chemistry' : int(student_1[3])}
rec_2 = {'name' : student_2[0], 'math' : int(student_2[1]), 'physics' : int(student_2[2]), 'chemistry' : int(student_2[3])}
rec_3 = {'name' : student_3[0], 'math' : int(student_3[1]), 'physics' : int(student_3[2]), 'chemistry' : int(student_3[3])}

name_of_student = raw_input()

if name_of_student == rec_1['name'] is True:
    s1 = (rec_1['math']+rec_1['physics']+rec_1['chemistry'])
    n1 = len(student_1) - 1
    print s1 / n1

elif name_of_student == rec_2['name'] is True:
    s2 = (rec_2['math']+rec_2['physics']+rec_2['chemistry'])
    n2 = len(student_2) - 1
    print s2 / n2

elif name_of_student == rec_3['name'] is True:
    s3 = (rec_3['math']+rec_3['physics']+rec_3['chemistry'])
    n3 = len(student_3) - 1
    print s3 / n3

else:
    print "Record not available"

输入:

3

K 67 68 69

A 70 98 63

M 52 56 60

中号

期望的输出: 56.00

1 个答案:

答案 0 :(得分:1)

问题在于你过多地投入其中。删除is True部分:

if name_of_student == rec_1['name']:

使用is True,您需要检查:

if name_of_student == (rec_1['name'] is True):

由于rec_1['name']永远不会是布尔值,因此带括号的部分将为False,并且由于name_of_student永远不会是False,所以整个事物将评估为{ {1}},未能找到学生的姓名。

你可能认为你正在做的事情更接近于此:

False

这可能会产生预期的结果,因为括号内的比较将产生一个布尔值,在CPython(标准Python实现)中,由于整数实习,它应该与其自身的实例具有相同的标识。但是,你不应该依赖它。只需删除if (name_of_student == rec_1['name']) is True: 部分,即可获得您正在寻找的行为。