用生成器模拟输入
mocking input with a generator
以下代码不模拟输入,有没有办法用生成器来模拟输入?
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 是生成器而不是字符串。
我是否必须使用全局变量创建自己的生成器,或者我在语法中遗漏了某些内容。
您正在将生成器分配给 __builtins__.input
,而不是使用生成器进行迭代并返回一个值,这就是它不起作用的原因。
相反,使用 iter
创建一个生成器并使用 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 没有打印
好的,谢谢你,我错过了实例化生成器的那一刻。
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")
所以我需要分两步完成,因为我不需要任何全局变量
以下代码不模拟输入,有没有办法用生成器来模拟输入?
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 是生成器而不是字符串。
我是否必须使用全局变量创建自己的生成器,或者我在语法中遗漏了某些内容。
您正在将生成器分配给 __builtins__.input
,而不是使用生成器进行迭代并返回一个值,这就是它不起作用的原因。
相反,使用 iter
创建一个生成器并使用 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 没有打印
好的,谢谢你,我错过了实例化生成器的那一刻。
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")
所以我需要分两步完成,因为我不需要任何全局变量