我想做一个函数,接收学生的测试答案和一个答案键,并返回一个列表,说明他们使用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']
我做错什么了?你知道吗
发生这种情况是因为
o
和i
在一个范围内计数,也就是说,它们在0,1,2...len(X)
计数,并且你也在为X的每个值遍历Y的每个值,而不是应该比较同一索引列表中的变量在这个算法中,它遍历X的长度,并用相同的索引比较列表的每个值,例如,它检查
X[0] = Y[0]
另外,在函数中,你可以使用X='student'和Y='answer key'这是很好的,因为你只有两个参数,它会覆盖它们,但是如果你以后要添加更多的参数,这可能会导致问题,如果你只是想把它们作为注释,我建议在下面加一个
#X = student and Y = answer key
会更干净如果你想找出你做错了什么,我策略性地放了两个print语句,告诉你代码的问题是什么。你知道吗
这一切都可以通过使用理解和zip来简化:
然而,为了解决您的问题,实际上您正在对该内部循环执行不必要的额外步骤。这是一个额外的低效率,你不需要。依赖于两个列表相等的事实,所以迭代其中一个列表,然后与另一个列表进行比较。使用
enumerate
,以便在每次迭代中都可以访问索引和值。你知道吗另外,您没有正确使用默认关键字参数。默认情况下,您将它们指定为一个字符串,而实际上并没有对这种指定使用默认大小写,所以请删除它。你知道吗
观察:
输出:
相关问题 更多 >
编程相关推荐