Python 用生成器模拟输入

Python 用生成器模拟输入,python,mocking,yield,Python,Mocking,Yield,下面的代码不模拟输入,有没有一种方法可以用生成器来模拟输入 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= i

下面的代码不模拟输入,有没有一种方法可以用生成器来模拟输入

    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是生成器而不是字符串


我是否必须使用全局变量创建自己的生成器,或者我遗漏了语法中的某些内容。

您正在将生成器分配给
\uuuu内置项。\uuuuuuuuu。输入
而不是使用生成器迭代并返回值,这就是它不起作用的原因

相反,使用
iter
创建一个generate,并使用
next(…)


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

好的,谢谢您,我错过了生成器实例化的时刻

def gg(l):
    for u in l:
            yield str(u)


def mockinput(thelist):
    bob = gg(thelist)
    __builtins__.input = lambda prompt="toto":  str(next(bob))


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

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

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

所以我需要分两步来做,因为我不想要任何全局变量

如果你不想要全局变量,你应该先对它进行求精,否则我的答案完全有效。请接受其中一个来结束主题。
def gg(l):
    for u in l:
            yield str(u)


def mockinput(thelist):
    bob = gg(thelist)
    __builtins__.input = lambda prompt="toto":  str(next(bob))


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

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

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