Вы очень, очень конкретны в том, что вы пытаетесь сделать. Если это упражнение, которое вы пытаетесь выполнить, в котором инструкции таковы: «Учитывая строку из 5 символов, создайте новую строку, в которой первые два символа чередуются с последними 3 в новой строке», тогда приведенный выше код будет работать для вас в этом ограниченном случае.
Однако, если вы пытаетесь решить проблему, было бы полезно иметь более подробную информацию о проблеме, которую вы пытаетесь решить, и о том, почему вы хотите ее решить.
Как указывает en_Knight, эта функция не работает с различными входными данными. И смысл вычислений, как правило, заключается в создании кода, который упрощает задачи, будучи достаточно общим, чтобы решать одни и те же задачи много раз с разными входными данными.
Несколько замечаний по стилю: при получении разделов списков вам нужно указать только начальный номер, если он не равен 0, или конечный номер, если он не находится в конце списка. Итак, вместо
second_part = formula[3:len(formula_chosen)]
вы можете просто написать:
second_part = formula[3:]
где пустая часть после :
сигнализирует "Получить все содержимое до конца строки".
Чтобы дать вам представление о том, что я имею в виду под написанием кода, чтобы это было более общее решение, вот функция, которая делает то, что вы описываете, со строками любой длины: делит их ровно пополам, а затем чередует символы.
def alternate_half(input):
output = ""
input_a = input[:len(input)/2]
input_b = input[len(input)/2:]
for pos, char in enumerate(input_b):
output += char
if len(input_a) > pos:
output += input_a[pos]
return output
Объяснение:
- def просто устанавливает функцию с именем alter_half здесь с параметром или входным значением, называемым «input», которое представляет собой строку, которую вы пометили как формулу выше.
input[:len(input)/2]``input[len(input)/2:]
- это просто фрагменты основного списка. Он использует описанный выше прием — этот python автоматически заполняет 0 или конец списка. Он также использует трюк, заключающийся в том, что при делении на целые числа в Python вы получаете взамен целое число. Так, например, в случае строки длиной 5 len(input)/2
равно 2, поэтому input_a — это первые 2 символа, а input_b — это символы от 2 до конца строки, поэтому «123».
- enumerate возвращает счетчик для каждого элемента в итерируемом объекте (например, в строке). Итак,
enumerate("*+123")
функционально эквивалентно [(0, '*'), (1, '+'), (2, '1'), (3, '2'), (4, '3')]
. Таким образом, мы можем использовать позиционный аргумент в input_a
и добавить к соответствующему символу в input_b
.
- Наконец, мы просто проверяем, что если input_a короче, мы не пытаемся получить символ, превышающий длину строки. Поскольку мы делим строки пополам,
input_a
никогда не будет короче, чем input_b, более чем на один символ.
person
Jordan Reiter
schedule
14.11.2014