如何使两个字符串为每个字符返回true或false?

2024-05-16 22:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个函数,接收学生的测试答案和一个答案键,并返回一个列表,说明他们使用1和0得到的答案是对的还是错的。 这是我的密码

answerkey='ABCABCDDD'
student11='BBCCBCDDD'
def check_answers(X='student',Y='answer key'):
    result=[]
    for i in range(len(X)):
        for o in range(len(Y)):
            if i==o:
                result.append('1')
            else:
                result.append('0')
        return result
print(check_answers(student11,answerkey))

我的输出应该给我:

 ['0','1','1','0','1','1','1','1','1']

相反,它给了我这个:

['1', '0', '0', '0', '0', '0', '0', '0', '0']

我做错什么了?你知道吗


Tags: 函数答案in密码列表forlencheck
3条回答

发生这种情况是因为oi在一个范围内计数,也就是说,它们在0,1,2...len(X)计数,并且你也在为X的每个值遍历Y的每个值,而不是应该比较同一索引列表中的变量

answerkey='ABCABCDDD'
student11='BBCCBCDDD'

def check_answers(X,Y):
    result=[]
    for i in range(len(X)):
        if X[i] == Y[i]:
            result.append('1')
        else:
            result.append('0')

    return result

print(check_answers(student11,answerkey))

在这个算法中,它遍历X的长度,并用相同的索引比较列表的每个值,例如,它检查X[0] = Y[0]

另外,在函数中,你可以使用X='student'和Y='answer key'这是很好的,因为你只有两个参数,它会覆盖它们,但是如果你以后要添加更多的参数,这可能会导致问题,如果你只是想把它们作为注释,我建议在下面加一个#X = student and Y = answer key会更干净

如果你想找出你做错了什么,我策略性地放了两个print语句,告诉你代码的问题是什么。你知道吗

def check_answers(X='student',Y='answer key'):
    result=[]
    print('X: %d, Y: %d' % (len(X), len(Y)))
    for i in range(len(X)):
        for o in range(len(Y)):
            print('i: %d, o: %d' % (i, o))
            if i==o:
                result.append('1')
            else:
                result.append('0')
        return result

这一切都可以通过使用理解和zip来简化:

>>> ['1' if x == y else '0' for x, y in zip(answerkey, student11)]
['0', '1', '1', '0', '1', '1', '1', '1', '1']

然而,为了解决您的问题,实际上您正在对该内部循环执行不必要的额外步骤。这是一个额外的低效率,你不需要。依赖于两个列表相等的事实,所以迭代其中一个列表,然后与另一个列表进行比较。使用enumerate,以便在每次迭代中都可以访问索引。你知道吗

另外,您没有正确使用默认关键字参数。默认情况下,您将它们指定为一个字符串,而实际上并没有对这种指定使用默认大小写,所以请删除它。你知道吗

观察:

answerkey='ABCABCDDD'
student11='BBCCBCDDD'
def check_answers(X, Y):
    result=[]
    for i, v in enumerate(answerkey):
            if v == student11[i]:
                result.append('1')
            else:
                result.append('0')
    return result
print(check_answers(student11,answerkey))

输出:

['0', '1', '1', '0', '1', '1', '1', '1', '1']

相关问题 更多 >