问题
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:
- use
input()
in Python3 andraw_input()
in Python2. - 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 usesys.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