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
改为:import sys for line in sys.stdin: a=int(line) if a!=0: lines.append(a)
点赞 回复 分享
发布于 2017-08-03 09:44
感谢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
由input()函数得到的输入是字符串类型的(str),所以停止的判断条件是 if n == '0': break 因为’0‘不是False。原程序会导致第一个while循环无法停止。
点赞 回复 分享
发布于 2017-08-02 22:31
input()在没有输入时会报异常,try..except:break 就行了
14 回复 分享
发布于 2019-04-10 15:38

相关推荐

白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务