Вы уверены, что ваша строка 7 читает d ['O']?
В сообщении об ошибке предлагается, что она читает d ['C']
Проблема в том, что если строка не содержитСимволы «O», затем «O» не будут в d, и это приведет к ошибке.
При втором определении d будет создан новый словарь, который не будет содержать клавишу «O».
def parse(string):
d = {'G' : 0, 'O' : 0, 'D' : 0}
d = {s: string.count(s) for s in string if s in d }
try:
d['O'] /= 2
except KeyError:
return 0
return min(d.values())
file = open("test1.py").read().split('\n')
print( "\n".join( [("Case #%d: %d" % (i, parse(file[i]))) for i in range(1, len(file))]))
(может оказаться более эффективным сделать d = {s: string.count (s) для s в d})
(мне также нравится альтернативное предложение использования collection.Counter.Однако, если вас интересует скорость, тогда мои измерения времени показывают, что для строки длиной 10 миллионов символов создание объекта Counter занимает 3 секунды, но только 0,012 секунды на вызов string.count)