EOFError: EOF when reading a lin

2024-06-16 09:10:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试定义一个函数来生成矩形的周长。代码如下:

width = input()
height = input()
def rectanglePerimeter(width, height):
   return ((width + height)*2)
print(rectanglePerimeter(width, height))

我想我没有留下任何争论的余地。


Tags: 函数代码inputreturn定义defwidthprint
3条回答
width, height = map(int, input().split())
def rectanglePerimeter(width, height):
   return ((width + height)*2)
print(rectanglePerimeter(width, height))

这样运行会产生:

% echo "1 2" | test.py
6

我怀疑IDLE只是在向脚本传递一个字符串。第一个input()是整个字符串。注意,如果在调用input()之后放入一些print语句,会发生什么情况:

width = input()
print(width)
height = input()
print(height)

运行echo "1 2" | test.py生成

1 2
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 5, in <module>
    height = input()
EOFError: EOF when reading a line

注意,第一个print语句打印整个字符串'1 2'。对input()的第二次调用引发EOFError(文件结束错误)。

所以像我用的那种简单的管道只允许你传递一个字符串。因此,您只能调用input()一次。然后必须处理该字符串,将其拆分为空白,并将字符串片段转换为int。那就是

width, height = map(int, input().split())

是的。

注意,还有其他方法可以将输入传递给程序。如果您在终端中运行了test.py,那么您可以分别键入12,没有问题。或者,您可以编写一个带有pexpect的程序来模拟终端,以编程方式传递12。或者,您可以使用argparse在命令行上传递参数,允许您使用

test.py 1 2

**最好使用try-except块来消除EOF**

try:
    width = input()
    height = input()
    def rectanglePerimeter(width, height):
       return ((width + height)*2)
    print(rectanglePerimeter(width, height))
except EOFError as e:
    print(end="")

将输入转换为整数:

width = int(input())
height = int(input())

相关问题 更多 >