在我编写的小脚本中,.append()函数将输入的项添加到列表的开头,而不是列表的末尾。(您可以清楚地理解,Python是非常新的,所以请轻松地对待我)
list.append(x)将一项添加到列表的末尾;相当于a[len(a):] = [x]。
这就是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我在这里是不是误解了什么,因为打印函数打印的是c,b,a而不是a,b,c (输入的顺序是a,b,c)
发布于 2016-02-12 09:34:26
好吧,这就是发生的事。
当您的文本不是"done"时,您已经编写了它的程序,以便立即再次调用函数(即递归调用它)。注意如何在执行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']发布于 2016-02-12 09:35:34
您的脚本中有递归。脚本在添加到列表之前先进入getting_text。因此,追加是在递归函数最终返回时完成的。这样,您就可以在返回路径上向下遍历堆栈,执行append()调用,等待以反向顺序执行。
也许像这样更容易站起来:
getting_text()
getting_text()
getting_text()
append()
append()
append()如果您希望在“正确”命令中得到结果,请在append调用之前将getting_text()上线移动。
发布于 2016-02-12 09:34:47
递归函数getting_text在将entered_text添加到列表之前调用自己。因此,内部调用的效果先于外部调用的效果。
如果你到处交换
getting_text(raw_input("Enter the text or write done to finish entering "))
user_input.append(entered_text)至
user_input.append(entered_text)
getting_text(raw_input("Enter the text or write done to finish entering "))然后,user_input的内容将是相反的顺序。
https://stackoverflow.com/questions/35359009
复制相似问题