Я просто создал простой таймер с использованием шаблона MVP (однако это может быть излишним для этого простого проекта). Он выключился, запустил / приостановил и остановил кнопку. Время отображается в формате HH: MM: SS. Счет времени выполняется с использованием потока, который выполняется несколько раз в секунду, и разницы между временем начала таймера и текущим временем.
Это поможет:
a='xyxxxyx'
import string
from random import randint
total=[x for x in list(string.ascii_lowercase) if x not in spil] # gets alphabets a to z in a list except the ones in a
spil=list(a) #spilt the string a in letters
for i in range(len(spil)-1):
if spil[i]==spil[i+1]: #if two consecitive are same then changes the next one with a random alphabet
spil[i]=total[randint(0,len(total))]
print("".join(spil))
Вывод будет:
'xyczxyx'
Вот способ решить ваш вопрос с помощью groupby
из модуля itertools
:
from itertools import groupby
def rep_adj(data, char='z'):
for _, v in groupby(data):
b = list(v)
if len(b) > 0:
for i, j in enumerate(b):
yield char if not i%2==0 else j
data = 'xyxxxyx'
out = ''.join(rep_adj(data))
print(out)
Вывод:
'xyxzxyx'
Это можно сделать с помощью регулярных выражений:
import re
def noDoubles(string):
subChars = set("wxyz")
result = list(string)
for match in re.finditer(r"(.)(\1+)",string):
usedChars = set(string[match.start():match.end()+1])
altChars = list(subChars - usedChars)
size = match.end(2) - match.start(2)
size = size - (size>1)
result[match.start(2):match.start(2)+size] = (altChars[:2]*size)[:size]
return "".join(result)
print(noDoubles("xyxxxyaaabbyyaaaaa")) # "xyxzxyazabzyzazwza"
Выражение (.) (\ 1+) находит первый символ и последующие повторения строки повторяющихся символов. Зацикливание совпадений позволит вам заменить эту последующую часть чередующимся набором символов, которые не повторяются и не следуют за ним. Вам необходимо использовать чередующийся шаблон для замены, чтобы не создавать новых повторений.
Обратите внимание, что нам нужно работать только с 4 подстановочными символами, потому что повторяющийся символ и следующий символ будут либо одним, либо двумя из 4 (оставляя два для альтернативы), либо ни одним из них (что позволяет нам использовать любые два из 4).