我有这段代码:
name = [0]
while True :
# The name needs to be entered twice
yourname = input("Enter your name: ")
name.append (yourname)
if name[-2]:
print("YOU DID IT")
break
else:
print("REPEAT")
此代码效果很好。但是我还是不明白这段代码:
name = [0]
?为什么将代码更改为name = []
会显示错误? name = [0]
在此代码中返回false?据我了解,if name [-2]
将检查name
处是否有值,因此如果代码name = []
应该返回false并显示“ REPEAT”。
答案 0 :(得分:0)
在Python中,为列表提供负整数索引i
(在这种情况下为-2)将从末尾返回第i个元素。
当您使用name = [0]
初始化列表然后输入名称(例如“德里克”)时,列表现在为name = [0, "Derrick"]
,表示name[-2] = 0
。
当您将列表初始化为name = []
时,在首次输入列表后,列表为name = ["Derrick"]
,而name[-2]
不在索引范围内,会返回错误。
if name[-2]
不会检查列表中该索引处是否有值。您的代码有效,因为Python认为0
为False
。因此,if name[-2]:
与if False:
相同。
尝试将列表初始化为name = [False]
和name = [True]
,这将使事情变得更清楚。
如果要检查列表中的元素数,请使用len(name)
。
您可以使用类似的内容:
name = []
while True:
yourname = input("Enter your name twice : ")
name.append (yourname)
if len(name) == 2:
print("YOU DID IT")
break
else:
print("REPEAT")
答案 1 :(得分:-1)
if name[-2]:
这将检查列表末尾的第二个元素是否存在。
如果初始化name=[]
,则在第一次迭代中,列表中将只有一个元素。因此,它将显示列表索引超出范围错误。
答案 2 :(得分:-2)
编写代码的粗略方式。但是看看这是否有助于理解。
最初:
name = [0]
len(name) = 1
第一次迭代
name = [0, "Foo"]
len(name) = 2
name[-2] = 0
if name[-2] => if 0 => False => REPEAT
第二次迭代
name = [0, "Foo", "Foo"]
len(name) = 3
name[-2] = "Foo" # name[1]
if name[-2] => if "Foo" => True => YOU DID IT => break from the loop