2011-12-18 2 views
3

Я никогда не использовал python в своей жизни. Мне нужно немного исправить данный код.как заменить все вхождение в строке с другим номером

Мне нужно заменить этот

new_q = q[:q.index('?')] + str(random.randint(1,rand_max)) + q[q.index('?')+1:] 

с чем-то, что заменить все вхождения? со случайным, разным числом.

как я могу это сделать?

ответ

5
import re 
import random 
a = 'abc?def?ghi?jkl' 
rand_max = 9 

re.sub(r'\?', lambda x:str(random.randint(1,rand_max)), a) 

# returns 'abc3def4ghi6jkl' 

или без регулярных выражений:

import random 
a = 'abc?def?ghi?jkl' 
rand_max = 9 
while '?' in a: 
    a = a[:a.index('?')] + str(random.randint(1,rand_max)) + a[a.index('?')+1:] 
+0

Интересно, что вы не можете сделать это string.replace, потому что строка замены вычисляется только один раз: '>>> q.replace (, ул«?» (randint (1, rand_max))) 'asd8wer8xcv8fghfgh'' – hughdbrown

+0

Вы уверены, что это гарантирует, что все номера разные? –

2

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

random_numbers = iter(random.sample(range(1, rand_max + 1), q.count("?"))) 
new_q = "".join(c if c != "?" else str(next(random_numbers)) for c in q) 
Смежные вопросы