Python - заменить все вхождения буквы в определенной позиции в строке - PullRequest
2 голосов
/ 19 мая 2011

Попытка создать телешоу "Lingo" на Python.

В игре игроки пытаются угадать пятибуквенное слово.Они начинают с моего случайного угадывания пятибуквенного слова.Затем загорится игровое поле, показывающее, как слово, которое они угадали, совпадает с фактическим словом.

Например, если реальным словом является «ущелье», а игроки угадывают «орел» - на доске будет показано, что «е» и «g» в настоящем слове, но не вправильная позиция по отношению к реальному слову «ущелье».(Значения g указаны в индексе [0] и [3], а в орле - в индексе [2]).

Если бы слово было «счастливым», а пользователи угадали «гарпию», на доске отобразилось бы, что три буквы были в реальном слове И они были правильно расположены.(сено).

В реализации Python я подчеркиваю, что буква правильная, но в неправильной позиции с символом '~' под ней.Если это правильно и в правильном положении, я ставлю '!'под ним.

Важная функция выглядит следующим образом:

  wordGuess = input("Guess a letter: ")[0:5]
    for letter in wordGuess:
        if letter in realWord:
            if wordGuess.find(letter) == realWord.find(letter)

// Не знаю, что делать отсюда

Если правильное письмо встречается более одного разас одной из букв, неправильно совпадающей с положением буквы в реальном слове - как мне ее обнаружить?

Например, если реальное слово было "длится", а кто-то должен был угадать "медь",первая буква «s» - правильная буква, но в неправильной позиции, а вторая буква «s» - правильная буква и правильная позиция.

Итак, каков наилучший способ реализовать функцию, которая может проверять, правильна ли буква и находится ли она в правильном положении (и обозначает ли она символом!), Или обозначать, что это правильная буква в неправильном положении?с ~

1 Ответ

5 голосов
/ 19 мая 2011

Чтобы найти общие буквы независимо от позиции:

In [1]: set('harpy') & set('happy')
Out[1]: set(['a', 'h', 'p', 'y'])

Чтобы получить логический флаг, указывающий, присутствует ли каждая буква «гарпия» в «счастливом» в любой позиции:

In [17]: [l in 'happy' for l in 'harpy']
Out[17]: [True, True, False, True, True]

В приведенном выше коде слово «счастливый» можно заменить на заданное пересечение из первого фрагмента.

Наконец, чтобы получить логический флаг для каждой позиции, указывающий, находится ли буква в правильной позиции:

In [2]: [l==r for l,r in zip('happy','harpy')]
Out[2]: [True, True, False, True, True]

Чтобы объединить вышесказанное в полное решение:

In [49]: real='lasts'

In [50]: guess='brass'

In [51]: exact=[l==r for l,r in zip(real,guess)]

In [52]: approx=[l in real for l in guess]

In [53]: chars=[[' ','~'],['!','!']]

In [54]: print guess, '\n', ''.join(chars[e][a] for e,a in zip(exact,approx))
brass 
  ~~!

(Если вам интересно использовать логические значения для индексации в массиве, они неявно преобразуются в целые числа: False = 0 и True = 1.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...