在我编写的小脚本中, .append() 函数将输入的项目添加到列表的开头,而不是该列表的末尾。 (正如你可以清楚地理解的那样,我对 Python 很陌生,所以对我宽容一些)
list.append(x)
将项目添加到列表末尾;相当于a[len(a):] = [x]
.
这就是说的https://docs.python.org/2/tutorial/datastructs.html https://docs.python.org/2/tutorial/datastructures.html.
你可以在下面看到我的代码:
user_input = []
def getting_text(entered_text):
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 "))
print user_input
我在这里误解了什么吗,因为 print 函数打印c,b,a
代替a,b,c
(我输入的顺序是a,b,c
)
好吧,这就是正在发生的事情。
当你的文字不是"done"
,你已经对其进行了编程,以便你立即地再次调用该函数(即递归调用它)。请注意您实际上如何将其设置为在执行以下操作后将项目附加到列表中getting_text(raw_input("Enter the text or write done to finish entering "))
line.
所以基本上,当您添加变量时,它将在递归函数完成后添加所有变量。
因此,当您输入a
,然后它再次调用该函数(尚未向列表输入任何内容)。然后你输入b
, then 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']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)