为什么"结束"仍然添加到列表中?

The*_*tor 2 python while-loop python-3.x

如果用户键入'end',则应该打印列表,并且'end'不应该添加到列表中while name != "end":,因为它是.

name = "";

names = []
while name != "end":
    name = input("Please enter a name")
    names.append(name)
    print("hi")

print(names)
Run Code Online (Sandbox Code Playgroud)

如果我输入鲍勃,吉姆,结束,列表应该是['Bob', 'Jim'],但它是['Bob', 'Jim', 'end']

Jea*_*bre 5

当然,因为你在输入名字后立即追加

喜欢在中间进行测试的无限循环(这样做可以节省双重测试/双重input调用):

while True:
    name = input("Please enter a name")
    if name == "end":
      break
    names.append(name)
Run Code Online (Sandbox Code Playgroud)

对于一线成瘾者,你可以itertools.takewhileitertools.repeat,但是当你不习惯时,这更难以理解,但有趣的是:

import itertools

names = list(itertools.takewhile(lambda x : x != "end",(input("Please enter a name") for _ in itertools.repeat(None))))
Run Code Online (Sandbox Code Playgroud)

或者更好更简单,感谢评论:

names = list(iter(lambda:input("Please enter a name"), 'end'))
Run Code Online (Sandbox Code Playgroud)