我的代码如下:
def function(a, b):
while a != 0 and b != 0:
...
return x
if __name__ == "__main__":
input = sys.stdin.read()
a, b = map(int, input.split())
print(function(a, b))
当我尝试运行它时,程序没有给我机会输入。
我收到以下回溯消息:
ValueError: not enough values to unpack (expected 2, got 0)
有人可以告诉我原因以及如何输入来测试我的程序。
非常感谢。
答案 0 :(得分:0)
sys.stdin.read()
会读stdin
,直至达到EOF。通常情况下,当该流被另一端关闭时(即通过任何提供输入),就会发生这种情况。
如果您运行cat inputfile.txt | your_program
之类的程序,则此功能正常。但是当stdin
连接到您的终端时,它将在交互模式下无休止地阅读,因此从另一端关闭它的唯一方法是关闭终端。
严格地说,你可以通过在一行上输入一个EOF字符来停止read()
,在Unix中为Ctrl-D
,在Windows中为Ctrl-Z
- 这可以在常规中使用Python控制台。但是在IPython中,这种技术不起作用:在Windows中,我将Ctrl-D
视为\x04
,将Ctrl-Z
视为空行,并且都不会停止读取(这是否是错误或按设计是另一个问题)。
所以,
input()
代替输入一行,或如果您需要多行输入,请使用限制从stdin
读取的内容的内容:
ll=[]
while True:
l = input() # or sys.stdin.readline().rstrip()
if not l: break
ll.append(l)
这样,您就可以通过输入空行来阻止程序要求更多输入。
最后,有sys.stdin.isatty()
允许你根据输入是否是交互式来调用不同的代码(但对于你的任务,这可能是一种过度杀伤)。