#python
import time import random answer = 'test' def func(): current_hint = '*'*len(answer) new_hint = random.randrange(len(answer)) new_answer = current_hint[:new_hint] + answer[new_hint] + current_hint[new_hint+1:] print(str(new_answer)) while True: func() time.sleep(3) Вот, что делает этот код: ***t **s* ***t t*** Мне нужно, чтобы то, что получилось, добавлялось к тем буквам которые уже были, ну вот так: *e** *es* *est test
Ответы
Ответ 1
import time import random def func(text, need_symbol): len_text = len(text) if need_symbol >= len_text: return text indexs = [] # Пока не наберем нужное количество индексов, из цикла не выйдем while len(indexs) < need_symbol: i = random.choice(range(len_text)) # Если уже есть индекс if i in indexs: continue indexs.append(i) return ''.join(c if i in indexs else '*' for i, c in enumerate(text)) answer = 'test' for i in range(len(answer)): new_answer = func(answer, i + 1) print(new_answer) time.sleep(3)Ответ 2
Очевидно надо сохранять подсказки. Для этого удобно будет воспользоваться словарем. Попробуйте так: answer = 'test' hint = dict() def func(answer, current_hint): seen_idx = set(current_hint.keys()) idx = random.choice(list(set(range(len(answer))) - seen_idx)) current_hint[idx] = answer[idx] return ''.join([x if i in current_hint else '*' for i,x in enumerate(answer)]) Тестирование: In [186]: while True: ...: print(func(answer, hint)) ...: time.sleep(3) ...: ...: ***t *e*t te*t testОтвет 3
import time from numpy import random def func(word): n = len(word) new_hint = random.permutation(len(answer)) current_hint = '*'*len(answer) for i in range(n): j = new_hint[i] current_hint = current_hint[:j] + answer[j] + current_hint[j+1:] print(current_hint) time.sleep(3) answer = 'test' func(answer)Ответ 4
Если рассмотреть задачу с точки зрения ООП, то есть строка (слово), содержащая символы, каждый из которых имеет одно из двух возможных состояний (скрыт - не скрыт). from time import sleep from random import shuffle class Char: '''Объект - символ, изначально скрыт''' def __init__(self, char): self.value = char self.hide = True def __repr__(self): return "*" if self.hide else self.value class UnhideString: def __init__(self, string): # коллекция хранит объекты символы в неизменном порядке self._chars = tuple(map(Char, string)) # а тут эти же символы будут перемешаны self.shuffle_chars = list(self._chars) shuffle(self.shuffle_chars) def print(self): while self.shuffle_chars: # забираем последний (после перемешивания) символ char = self.shuffle_chars.pop() # изменяем свойство char.hide = False # вывод строки в изначальном порядке print(*self._chars, sep='', end='') if self.shuffle_chars: print('\r', end='') sleep(1) else: print() UnhideString("test").print()
Комментариев нет:
Отправить комментарий