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

时间:2017-11-08 13:58:50

标签: python python-3.x while-loop

如果用户键入'end',则应该打印列表,并且由于while name != "end":而不应将'end'添加到列表中,但它是。

name = "";

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

print(names)

如果我输入Bob,Jim,结束,列表应该是['Bob', 'Jim'],而是['Bob', 'Jim', 'end']

2 个答案:

答案 0 :(得分:5)

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

首选中间带有测试的无限循环(这样做可以保存双重测试/双input次调用):

while True:
    name = input("Please enter a name")
    if name == "end":
      break
    names.append(name)

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

import itertools

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

甚至更好&更简单感谢评论:

names = list(iter(lambda:input("Please enter a name"), 'end'))

答案 1 :(得分:1)

你必须在进入之前询问并在里面问:),如果你这样做,你必须稍微有点订单。

这里name = "";你以空字符串开头,那是"" != "end",所以第一次检查是没用的,因为你要求循环内的另一个输入,那个输入可能是“结束”,无论什么

,都会被提及
name = input("Please enter a name")

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


print(names)