【问题标题】:How to simulate series of user input in Python如何在 Python 中模拟一系列用户输入
【发布时间】:2019-11-30 05:59:37
【问题描述】:

假设我们有这样一个函数

def function():
    while True:
        user_input = input("enter a number: ")
        if user_input == "0":
            print("finish")
            break
        print("the number is " + user_input)

在main()中我们调用函数

function()

然后它会要求用户输入,直到它得到一个“0”。 我想要做的是有一些东西可以存储所有输入,并自动将其提供给控制台。所以,我不需要在控制台中手动输入它们。

请注意,我希望函数不接受参数并使用 something_taken_as_input 而不将其作为参数传递。

something_taken_as_input = ["1","2","3","0"]
function()
# enter a number: 1
# enter a number: 2
# enter a number: 3
# enter a number: 0
# finish
# all done by the program, no manually typing!

【问题讨论】:

  • 从文件 python script.py < user_inputs.txt 获取输入。您甚至可以将结果保存在文件 python script.py < user_inputs.txt > result.text 中,以便将此文件与具有预期结果的文件进行比较。
  • 当函数获取值作为参数并且其他函数仅从用户获取值并使用该值运行第一个函数时很好。通过这种方式,您可以使用列表、文件、sys.args 或数据库中的数据测试第一个函数 - 而您不必手动进行。

标签: python io


【解决方案1】:

一个有趣的方法是将输入法传递给函数。

这样,你可以这样做:

def function(inp_method):
while True:
    user_input = inp_method("enter a number: ")
    if user_input == "0":
        print("finish")
        break
    print("the number is " + user_input)

如果您想从用户那里获取输入, 像这样称呼它:

function(input)

否则,使用您要输入的数据定义一个类:

    class input_data:
        def __init__(data):
            self.data = data
            self.count = 0

        def get(self, str = ""):
            if(self.count == len(self.data)):
            return 0
        else:
            count+=1
            x = self.data[count-1]

并使用以下方法调用函数:

d = input_data(["1", "2", "3", "0"])
function(d.get)

基本上,您只是通过函数的参数传递方法。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多