以下代码不模拟输入,是否可以使用生成器来模拟输入?

    inputlist = [5,1,2,3,4,5,6]

    def mock_input(dummy_prompt=">>> "):
        global inputlist
        for u in inputlist:
                yield str(u)

    __builtins__.input = mock_input

    l=[]
    x= input()
    for u in range(int(x)):
        l.append(int(input()))

    if l==inputlist[1:]:
        print("bravo")


错误是x是生成器而不是String。

我是否必须使用全局变量创建自己的生成器,还是错过了语法。

最佳答案

您是将生成器分配给__builtins__.input而不是使用生成器进行迭代并返回值,这就是为什么它不起作用的原因。

而是使用iter创建一个generate,然后使用next(..)对其进行迭代

inputlist = [6,1,2,3,4,5,6]
gen = iter(inputlist)

def mock_input(dummy_prompt=">>> "):
    return str(next(gen))

__builtins__.input = mock_input

l=[]
x= input()
for u in range(int(x)):
    l.append(int(input()))

if l==inputlist[1:]:
    print("bravo")


PS:我将列表的第一个数字修改为6,否则您丢失了一个项目并且bravo没有打印

关于python - 用生成器模拟输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37595414/

10-12 16:58