【问题标题】:Python - Ask for input multiple times til a certain input disables itPython - 多次询问输入,直到某个输入禁用它
【发布时间】:2016-04-06 19:02:54
【问题描述】:

我正在尝试编写一个创建列表的函数。 该功能需要用户输入。 该函数将提示用户输入元素的输入。 该元素将被添加到列表中。 当用户输入某个元素即字符串时,该函数返回列表。

所以当我运行这个函数时,它应该是这样的:

Input an element: 100
Input an element: 200
Input an element: 300
Input an element: Stop
[100, 200, 300]

到目前为止,这是我的进步:

def list_maker():
    """Make a list from input"""
    result = []
    def main():
        element = input("Input an element: ")
        if element == "Stop":
            print(result)
        else:
            main()
    main()

list_maker()

【问题讨论】:

标签: python python-3.x list input


【解决方案1】:

这就是我想要达到的目标的方式:

final_list = []
while 1:
    user_input = input("Input an element: ")
    if user_input == "Stop":
        break
    final_list.append(user_input)

print(final_list)

要将其合并到您现有的代码中:

def list_maker():
    """Make a list from input"""
    result = []
    while 1:
        user_input = input("Input an element: ")
        if user_input == "Stop":
            break
        result.append(user_input)
    print(result)

list_maker()

这个while 循环一直持续到触发内部的if 语句。 if 中的 break 导致循环退出,然后执行循环之后的任何操作。

这是你运行程序时的样子:

Input an element: 100
Input an element: 200
Input an element: 300
Input an element: Stop
[100, 200, 300]

您尝试的方法不起作用是因为您实际上从未将element 添加到result 列表中。如果您仍想使用递归解决方案而不是 while 循环,只需添加一行代码,将 element 附加到列表中:

def list_maker():
    """Make a list from input"""
    result = []
    def main():
        element = input("Input an element: ")
        if element == "Stop":
            print(result)
        else:
            result.append(element) # Added
            main()
    main()

list_maker()

【讨论】:

  • 有趣,我还在从头学习,我不知道break是做什么的。如果我希望它生成一个元组而不是一个列表怎么办?
  • @Oulchura break 退出循环。如果您在 forwhile 循环中并且解释器命中了 break 语句,它会立即退出 forwhile 循环并开始运行它之后的代码。你可以阅读更多关于它的信息here on the Python documentation
  • 我刚刚意识到它返回字符串,我正在寻找的实际上是 int 或 floats。我能做什么?
  • @Oulchura 在添加之前致电floatint element。所以把result.append(element)改成result.append(float(element))或者result.append(int(element))
【解决方案2】:

您不需要休息,也不需要递归地执行此操作。保持简单:

def list_maker(result):
    """Make a list from input"""
    element = input("Input an element: ")
    while element != "Stop":
        result.append(int(element))  # In your example you listed numbers, not strings, the int() function will turn the element into a number
        element = input("Input an element: ")

result = []
list_maker(result)
print(result)

如果你想让结果存在于函数之外,你需要在函数之外声明它。列表是可变的,这意味着 append 函数实际上会改变函数内部的结果列表。这样您就可以在 list_maker 运行后将其打印出来。您可能希望让用户更容易退出。将 while 行更新为此,如果他们不输入数字,它将退出:

while element.isdigit():

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2016-05-02
    • 2020-04-03
    相关资源
    最近更新 更多