Why does standard input() cause an EOF error

≡放荡痞女 提交于 2019-12-11 00:58:59

问题


I was solving a problem on HackerRank when I encountered the following problem in my code. I tested it out on my Python (2.7.10) IDLE , and it was working fine. But it showed the following error on HackerRank:

Traceback (most recent call last):
  File "solution.py", line 13, in <module>
    input_2=input()
EOFError: EOF when reading a line

I entered the following code:

import sys 
input_2=""
n=int(input())
m=0
l=0
array=[]
main_array=[]
for i in range (0,n):
    inp=input()
    array=(inp.split(" "))
    main_array+=array   
for no in range(0,100000,1):    
    input_2=input()
    for m in range(0,len(main_array),2):
        l=0
        if input_2==main_array[m]:
            l+=1
            print (main_array[m]+"="+main_array[m+1])
    if l==0:
        print ("Not found")

I don't know why this error turned up in the HackerRank Engine. Thanks


回答1:


I don't know what are you exactly trying to achieve through your code, but you are getting an error due to the line inp=input(), which tries to take a string as input, whereas it's designed to take an int, float, or string entered with quotes in python 2.7. Use raw_input() instead to take the complete line as string input, and then split it with space as delimiter.

I followed the link you provided, and I see that the given question needs to be solved using dictionaries. Hence, instead of appending the name and number, just store it in dictionary as a key-value pair and for each query, just check whether the key exists in the dictionary or not. If not, print Not found, else print the key and its corresponding value. Here is the code for reference :

import sys
input_2=""
n = input()
m=0
l=0
array=[]
main_array={}
for i in range (0,n):
    inp=raw_input()
    array=(inp.split())
    main_array[array[0]] = array[1]
for i in range(0,n):
    take = raw_input()
    if take in main_array :
        print take+"="+main_array[take]
    else :
        print "Not found"

Hope this helps !




回答2:


I encountered similar EOF issues when I coded in HackerRank. Actually, there are 2 issues:

  1. use input() in Python3 and raw_input() in Python2.
  2. If you know the exact number of input, you can N-number for-loop to handle each input(). However, the difficulty is that you don't know how many inputs you will have. In this case, you will have to use sys.stdin.readlines() to convert them into a list, and then use a for-each loop.

The following codes are from "Editorial" of https://www.hackerrank.com/challenges/30-dictionaries-and-maps/

import sys 

# Read input and assemble Phone Book
n = int(input())
phoneBook = {}
for i in range(n):
    contact = input().split(' ')
    phoneBook[contact[0]] = contact[1]

# Process Queries
lines = sys.stdin.readlines()  # convert lines to list
for i in lines:
    name = i.strip()
    if name in phoneBook:
        print(name + '=' + str( phoneBook[name] ))
    else:
        print('Not found')


来源:https://stackoverflow.com/questions/40828705/why-does-standard-input-cause-an-eof-error

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!