Хорошо, это это то, что происходит.
Когда ваш текст не "done"
, вы запрограммировали его так, чтобы сразу10 снова вызвал функцию (т. Обратите внимание, как вы на самом деле установили его для добавления элемента в список ПОСЛЕ того, как вы делаете линию getting_text(raw_input("Enter the text or write done to finish entering "))
.
Так что, когда вы добавляете переменные, они будут добавлять все переменные ПОСЛЕ того, как это делается с помощью рекурсивной функции.
Следовательно, когда вы вводите a
, он снова вызывает эту функцию (пока ничего не внесен в список). Затем вы вводите b
, затем c
. Когда вы вводите done
, рекурсивный бит завершается. СЕЙЧАС, это user_input.append(...
. ОДНАКО, порядок отменен, потому что он имеет дело с c
с тех пор, как это было последним.
Это можно показать при печати списка внутри функции:
>>> def getting_text(entered_text):
... print user_input
... if entered_text == "done":
... print "entering the texts are done!"
... else:
... getting_text(raw_input("Enter the text or write done to finish entering "))
... user_input.append(entered_text)
...
>>>
>>> getting_text(raw_input("Enter the first text "))
Enter the first text a
[]
Enter the text or write done to finish entering b
[]
Enter the text or write done to finish entering c
[]
Enter the text or write done to finish entering done
[]
entering the texts are done!
>>> user_input
['c', 'b', 'a']
Обратите внимание на оператор печати линия 2.
Так как же это исправить? Просто: добавьте в список, прежде чем вы будете рекурсивно звонить.
>>> user_input = []
>>> def getting_text(entered_text):
... if entered_text == "done":
... print "entering the texts are done!"
... else:
... user_input.append(entered_text)
... getting_text(raw_input("Enter the text or write done to finish entering "))
...
>>> user_input = []
>>> getting_text(raw_input("Enter the first text "))
Enter the first text a
Enter the text or write done to finish entering b
Enter the text or write done to finish entering c
Enter the text or write done to finish entering done
entering the texts are done!
>>> user_input
['a', 'b', 'c']
FWIW, используя рекурсию в Python редко является хорошей идеей, если вы не обрабатывать рекурсивные структуры данных (например, дерево), поскольку Python ограничивает глубину рекурсивных вызовов и не может выполнить [tail call] (https://en.wikipedia.org/wiki/Tail_call) устранение. –
Если вы новичок в python ... почему вы используете python2.7, который имеет 5-летнюю версию? Просто изучите python3 сейчас и, в конце концов, если oyu нужно обработать устаревшие системы, вы узнаете о различиях с python2. – Bakuriu
Лучший онлайн-инструмент (решенный после того, как спросил некоторых друзей), был Codecademy, который использует 2.7. Плюс мне сказали, что не так много различий, и я могу легко переключиться на 3.x. Я также поступил на некоторые из курсов 3.x, например, в Удэми, но еще не начался. Я, вероятно, переключится на 3.x, когда мне будет комфортно :) – firko