2017-01-30 2 views
2

Я имеющие строки, как:Заменить каждое вхождение подстроки в строке с случайно сгенерированными значениями

"What is var + var?" 
"Find the midpoint between (var,var) and (var,var)" 

Я хочу изменить каждое вхождение var с в указанных предложениях в случайных различные целые числа. Мой текущий код:

question = question.replace("var",str(random.randint(-10,10))) 

Это только сделало все целые числа одним и тем же беспорядочно генерируемым числом, например;

"Find the midpoint between (5,5) and (5,5)" 

Как я знаю, что for циклы не могут быть использованы на веревочке, как можно изменить подстроку «переменный» для различных значений, а не того единственным сгенерированного числа?

+6

(1) Строки в Python неизменяемы, вы не можете их изменять. (2) [Прочитайте о форматировании строк] (https://pyformat.info/), это, вероятно, поможет вам задать правильный вопрос. – 9000

ответ

4

Вы можете использовать str.format для достижения этой цели, как:

import random 

my_str = "Find the midpoint between (var,var) and (var,var)" 

var_count = my_str.count("var") # count of `var` sub-string 
format_str = my_str.replace('var', '{}') # create valid formatted string 

# replace each `{}` in formatted string with random `int` 
new_str = format_str.format(*(random.randint(-10, 10) for _ in range(var_count))) 

где new_str будет держать что-то вроде:

'Find the midpoint between (6,-10) and (-5,2)' 

Предложение: Это лучше использовать '{}' вместо 'var' в исходной строке (поскольку python выполняет форматирование на основе {}). Следовательно, в приведенном выше решении вы можете пропустить часть .replace().


Ссылки, связанные с строки форматирования:

+1

, за исключением того, что вы должны _store_ случайных значений и сортировать их, или никто не может проверить, что ваш ответ правильный :) –

+0

Спасибо, пучок человек :)) – RazDoog

0

Вы можете использовать следующий код, чтобы сделать его проще:

pattern = "Find the midpoint between (%s, %s) and (%s, %s)" 
question = pattern % (str(1), str(2), str(3.0), str(4)) 
print(question) 
>>> Find the midpoint between (1, 2) and (3.0, 4) 
0

Вы можете использовать строку форматирования, например, так:

"What is {} + {}?".format(random.randint(-10,10), random.randint(-10,10)) 

и:

four_random_numbers = [random.randint(-10, 10) for _ in range(4)] 
"Find the midpoint between ({}, {}) and ({}, {})".format(*four_random_numbers) 

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

Смежные вопросы