cc.replace
не собирается, чтобы помочь вам здесь, потому что replace
не имеет возможности различать между одним и другим _
_
, что это именно то, что вы пытаетесь сделать: вы хотите, чтобы заменить те, которые в том же положении как 't'
письма в bb
.
«В том же положении» по своей сути означает, что вы будете либо работать по индексам, либо использовать zip
.
Если у вас не было свободных мест в cc
, которые не находятся в bb
, это было бы легко. Любой из них:
cc = ''.join(a if bb[i] == a else cc[i] for i in range(len(cc)))
cc = ''.join(a if b == a else c for b, c in zip(bb, cc))
Я думаю, что второй один проще, но ...
К сожалению, у вас есть те пробелы в cc
, которые не bb
. Таким образом, элементы cc
не выстраиваются в линию с элементами bb
; четные строятся с элементами bb
в половине индекса, а нечетные - это всегда пробелы. Таким образом, вы в значительной степени должны использовать индексы, чтобы сделать это, и это некрасиво:
cc = ''.join(a if (i % 2 == 0 and bb[i//2] == a) else cc[i]
for i in range(len(cc)))
Я думаю, вы бы лучше не хранение пространства в cc
. В этом случае нет причин, по которым cc
должен быть строкой вместо списка. Просто сделайте это:
cc = ['_' for _ in bb]
Затем, чтобы обновить его:
cc = [a if b == a else c for b, c in zip(bb, cc)]
Затем, чтобы превратить его в строку, которую вы хотите распечатать:
print(' '.join(cc))
Так где же ваш ближайший попытка, и в чем именно проблема с этим? – jonrsharpe
Пожалуйста, придумайте лучшие имена переменных. Написав ответ, я три раза использовал неправильных, прежде чем правильно это понять, потому что невозможно вспомнить, означает ли «bb» целевое слово и 'cc' в настоящее время угадаемое частичное слово или наоборот. – abarnert
Я хотел бы упомянуть о другом подходе: вы могли бы заменить все еще не угаданные буквы в решении '_' :) – yoshi