python3读取多行输入出现EOF

python3 读取多行输入出现EOFError: EOF when reading a line
做的是牛客网到汽水瓶问题:

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?


输入描述:


输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。


输出描述:


对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1

输入

3 10 81 0

输出

1 5 40


我的代码如下:


lines = []

while True:
line = input()
if not line:
break
lines.append(line)


for i in range(10):
if eval(lines[i]) == 0:
lenLine = i
break


def MaxBottleNum(Num):
rest = (Num%3)
n = (Num//3)
New_Num = n + rest
while((New_Num)>=3):
n +=(New_Num//3)
rest1 = New_Num%3
New_Num = rest1 + (New_Num//3)
if New_Num == 2:
n += 1
return n

for i in range(lenLine):
num = int(lines[i])
print(MaxBottleNum(num))


然后提交运行:

您的代码已保存
返回非零:您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0,如果是Javascript/Python等脚本语言请确认你的代码没有语法错误
case通过率为0.00%

测试用例:
Traceback (most recent call last):
File "a.py3", line 5, in
line = input()
EOFError: EOF when reading a line


我在自己的jupyter notebook 上跑是能够得到正确到输出的,但是一到系统上就不行了,原因在哪里呢? 谢谢


全部评论
根据Neyanbhbin以及变戏法的羊的解答,我最终将程序修改如下,并通过: import sys lines = [] for line in sys.stdin: a=int(line) if a!=0: lines.append(a) lenLine = len(lines) def MaxBottleNum(Num): rest = (Num%3) n = (Num//3) New_Num = n + rest while((New_Num)>=3): n +=(New_Num//3) rest1 = New_Num%3 New_Num = rest1 + (New_Num//3) if New_Num == 2: n += 1 return n for i in range(lenLine): num = lines[i] print(MaxBottleNum(num))
3 回复 分享
发布于 2017-08-03 10:19
由input()函数得到的输入是字符串类型的(str),所以停止的判断条件是 if n == '0': break 因为’0‘不是False。原程序会导致第一个while循环无法停止。
点赞 回复 分享
发布于 2017-08-02 22:31
感谢Neyanbhbin的回答! 但是我还存在一个问题,当我把一个循环改为: while True: line = input() if line == '0': lines.append(line) break lines.append(line) 后运行,还是出现了错误: Traceback (most recent call last): File "a.py3", line 4, in line = input() EOFError: EOF when reading a line 请问这是怎么回事呢?  谢谢!
1 回复 分享
发布于 2017-08-02 23:52
改为:import sys for line in sys.stdin: a=int(line) if a!=0: lines.append(a)
点赞 回复 分享
发布于 2017-08-03 09:44
input()在没有输入时会报异常,try..except:break 就行了
14 回复 分享
发布于 2019-04-10 15:38

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
1
5
分享
牛客网
牛客企业服务