2016-11-27 2 views
0

Я решал проблему в HackerRank, когда в моем коде возникла следующая проблема. Я тестировал его на своем Python (2.7.10) IDLE, и он работал нормально. Но он показал следующее сообщение об ошибке на HackerRank:Почему стандартный вход() вызывает ошибку EOF

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

Я вошел следующий код:

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") 

Я не знаю, почему эта ошибка оказалась в HackerRank Engine. Благодаря

+1

На интернет-платформах обычно есть текстовое поле, в котором вы размещаете вход, это не будет сделано, как это в вашем терминале. –

+0

Это означает, что вы пытались читать больше строк ввода, чем были предоставлены. Дайте нам описание ввода или просто ссылку на проблему. –

+0

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

ответ

0

Я не знаю, что вы точно пытаетесь достичь с помощью кода, но вы получаете сообщение об ошибке из-за линией inp=input(), которая пытается взять строку в качестве входных данных, в то время как он предназначен принять int , float, или string entered with quotes в python 2.7. Вместо этого используйте raw_input(), чтобы взять полную строку в качестве ввода строки, а затем разделить ее на space как разделитель.

Я следил за предоставленной вами ссылкой, и я вижу, что данный вопрос необходимо решить, используя dictionaries. Следовательно, вместо добавления name и number просто сохраните его в dictionary как пара key-value, и для каждого запроса просто проверьте, существует ли ключ в словаре или нет. Если нет, напечатайте Not found, иначе распечатайте ключ и его соответствующее значение. Вот код для справки:

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" 

Надеюсь, это поможет!

+0

Спасибо большое! –

+0

Нет проблем, пожалуйста, отметьте ответ как принятый. @YajurTayal – Jarvis

0

Я столкнулся с подобными проблемами EOF, когда я закодирован в HackerRank. На самом деле, есть 2 проблемы:

  1. использование input() в Python3 и raw_input() в python2.
  2. Если вы знаете точное количество входных данных, вы можете N-номер для цикла обрабатывать каждый input(). Однако сложность заключается в том, что вы не знаете, сколько у вас будет ресурсов. В этом случае вам нужно будет использовать sys.stdin.readlines(), чтобы преобразовать их в список, а затем использовать цикл for-each.

следующие коды от «Editorial» из 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') 
Смежные вопросы