2016-11-27 3 views
0

Ich habe ein Problem mit HackerRank gelöst, als das folgende Problem in meinem Code auftrat. Ich habe es auf meinem Python (2.7.10) IDLE getestet, und es hat gut funktioniert. Aber es zeigte die folgenden Fehler auf HackerRank:Warum verursacht die Standardeingabe() einen EOF-Fehler?

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

Ich trat in den folgenden 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") 

Ich weiß nicht, warum dieser Fehler in dem HackerRank Motor aufgedreht. Dank

+1

Auf Online-Plattformen gibt es in der Regel ein Textfeld, in dem Sie Eingang platzieren, ist es nicht getan, wie es in Ihrem Terminal ist. –

+0

Es bedeutet, dass Sie versucht haben, mehr Zeilen zu lesen, als zur Verfügung gestellt wurden. Geben Sie uns eine Beschreibung der Eingabe oder nur einen Link zu dem Problem. –

+0

https://www.hackerrank.com/challenges/30-dictionaries-and-maps?h_r=next-challenge&h_v=zen –

Antwort

0

Ich weiß nicht, was Sie genau zu erreichen, durch den Code versucht, aber Sie bekommen einen Fehler aufgrund der Linie inp=input(), die einen String als Eingabe zu nehmen versucht, während er eine int zu ergreifen, ist , float, oder string entered with quotes in python 2.7. Verwenden Sie stattdessen raw_input(), um die vollständige Zeile als Zeichenfolgeneingabe zu verwenden, und teilen Sie sie dann mit space als Trennzeichen.

Ich folgte dem Link, den Sie angegeben haben, und ich sehe, dass die gegebene Frage mit dictionaries gelöst werden muss. Anstatt die name und number anzufügen, speichern Sie sie einfach unter dictionary als key-value und überprüfen Sie für jede Abfrage, ob der Schlüssel im Wörterbuch vorhanden ist oder nicht. Wenn nicht, drucken Sie Not found, sonst drucken Sie den Schlüssel und den entsprechenden Wert. Hier ist der Code für die Referenz:

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" 

Hoffe, das hilft!

+0

Vielen Dank !! –

+0

Kein Problem, bitte markieren Sie die Antwort als akzeptiert. @ YajurTayal – Jarvis

0

Ich stieß auf ähnliche EOF-Probleme, wenn ich in HackerRank codierte. Tatsächlich gibt es zwei Probleme:

  1. Verwendung input() in Python3 und raw_input() in Python2.
  2. Wenn Sie die genaue Anzahl der Eingabe kennen, können Sie N-Nummer for-Schleife für jede input() behandeln. Die Schwierigkeit besteht jedoch darin, dass Sie nicht wissen, wie viele Eingaben Sie haben werden. In diesem Fall müssen Sie sys.stdin.readlines() verwenden, um sie in eine Liste zu konvertieren und dann eine for-each-Schleife zu verwenden.

Die folgenden Codes werden von „Editorial“ von 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') 
Verwandte Themen