2014-12-18 4 views
2

Я работаю над назначением класса, которое требует от меня заменить%, за которым следует число, до соответствующего его позиционного параметра (если дано задание только таких чисел и требуемых параметров) .I пытались решить это в течение нескольких часов безрезультатно. Исправлено переполнение стека и веб, но заданные ранее вопросы заменяли только целое на что-то, что достаточно просто.Заменить%, за которым следует число в строке

Ex: форматирование ("Исход% 0", "Моисей") -> должен возвращать "Исход Моисея"

форматирования ("Исход% 0 и% 1", "Короли", "Боги") -> должен возвращать "Исход Короли и Боги"

форматирование ("Исход% 1 и% 0", "Короли", "Боги") -> должен возвращать "Исход Боги и цари"

По внешнему виду я думаю, что прототипом форматирования функции будет

def formatting(inputstring, *args): 

вещи, которые я пытался до сих пор

1.for петля на наивности заменить% число с соответствующим аргументом

for length in len(args): 
    temp=temp.replace("%length","arg[length]")   

Конечно, это не работал бы потому, что они являются строками, а не целые числа

2. Использование inputstring.format() для возврата нужной строки. проблемы вызваны различной длины ARGS Ex:

if len(args) == 1:  
    return inputstring.replace("%0",args[0]) 
if len(args) == 2: 
    inputstring = inputstring.replace("%0",args[0]) 
    return inputstring.replace("%1",args[1]) 

достаточно легко, это работает! но не чувствует себя хорошо, громоздко для многих аргументов пробовал делать это в петле не получилось

Помогите Спасибо!

+0

Конечно Python есть операторы печати, которые уже делают этот вид вещь автоматически. Проверьте здесь: https://docs.python.org/2/tutorial/inputoutput.html –

+0

Рассмотрите 'enumerate (args)' ... – jonrsharpe

+0

@RobertHarvey: Возможно, но это задание, я предполагаю, что они хотят, чтобы студенты должны сделать это вручную – Claudiu

ответ

1

Вы чуть было его здесь:

for length in xrange(len(args)): 
    temp = temp.replace("%length","arg[length]") 

Рассмотрим:

>>> s = "Hello %length there %0 man" 
>>> length = 0 
>>> args = ["something"] 

Если вы делаете замену вы сделали, неправильно, что происходит:

>>> s.replace("%length", "args[length]") 
'Hello args[length] there %0 man' 

Вы хотите закончить up делая это:

>>> s.replace("%0", "something") 
'Hello %length there something man' 

Как это сделать?Для данного индекса, вы должны построить строку "%" с последующим индексом, а затем получить это значение из args:

>>> i = 0 
>>> "%" + str(i) 
'%0' 
>>> args[i] 
'something'  
>>> s.replace("%" + str(i), args[i]) 
'Hello %length there something man' 

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

>>> for i in xrange(len(args)): 
     temp = temp.replace("%" + str(i), args[i]) 

Или более pythonically, вы можете использовать enumerate, который позволяет перебирать список и получить индексы в то же время:

>>> for i, arg in enumerate(args): 
     temp = temp.replace("%" + str(i), arg) 
+0

Идеальный ответ ! –

+2

используйте 'enumerate' вместо цикла по индексу:' для idx, val в enumerate (args): temp = temp.replace ("% {0}". Format (idx), val) ' – Daniel

+0

У этого будут проблемы, если число аргументов превышает 9. – tzaman

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