程序从python中读取一组答案。 l_answers 将是正确的。 l_rscore 将是从文件中读取的答案,现在已编入索引列表。
如果我想相互比较(list [0] || list2 [0])并检查正确答案和错误答案的数量,我需要知道如何继续。
目前的方法不起作用,没有回溯。它只是保持计算,永无止境。
def main():
l_answers = [['B', 'D', 'A', 'A', 'C'],
['A', 'B', 'A', 'C', 'D'],
['B', 'C', 'D', 'A', 'D'],
['C', 'C', 'B', 'D', 'A']]
l_rscore = read_file()
result = get_result(l_answers, l_rscore)
print result
def read_file():
rows = 4
colums = 5
l_results = []
input_file = open('answers.txt', 'r')
for r in range(rows):
for c in range(colums):
for line in input_file:
l_results.append(line.strip())
return l_results
def get_result(l, l_2):
correct = 0
index = 0
while index < len(l):
if l_2[index] == l[index]:
correct += 1
index += 1
return correct
main()
答案 0 :(得分:2)
get_result
中有一个无限循环,在你增加index
之前你有一个条件,而这个条件并不总是成立。
一般,如果您有两个列表,其中一个是答案,另一个是建议(具有相同的顺序) - 您可以使用zip一起处理它们:
def compare_answers(suggestions, answers):
# pair what was answered with what's true
pairs = zip(suggestions, answers)
# summarize scores - 1 for each correct answer
return sum(i == j for i, j in pairs)
注意:将True
添加到某个数字时,会将其视为1(False
为0)。所以sum
给出了数字(默认值从0开始)。
答案 1 :(得分:2)
您可以展平两个列表并通过列表理解进行比较。
def get_results(l, l2):
lflat = [i for sublist in l for i in sublist]
l2flat = [i for sublist in l2 for i in sublist]
return sum(i[0] == i[1] for i in zip(lflat, l2flat))
答案 2 :(得分:1)
你的无限循环就在这里:
index = 0
while index < len(l):
if l_2[index] == l[index]:
correct += 1
index += 1
如果第一个答案彼此不相等,则索引永远不会增加,而while循环会继续迭代,卡在第一个答案上。
答案 3 :(得分:0)
首先,您需要像input_file = open('answers.txt', 'r').read()
那样读取文件,然后必须将其解析为嵌套列表。其次,你底部的循环应该是:
while index < len(l):
if l_2[index] == l[index]:
correct += 1
index += 1
编辑:如果您的文件被写为列表列表,您可以像这样轻松地构建列表,将包含的字符串作为列表进行评估。
input_file = eval(open('answers.txt', 'r').read())