2014-09-24 1 views
0

вот мой кодTraceback (самый последний вызов последнего) EOFError

t=input() 
for q in range(t): 
    s=raw_input() 
    m,n=s.split(' ') 
    ans = (m*n)*(m*n-1) 
    if(m>1 and n>1): 
    ans -= 4*(n-1)(m-2) + 4*(m-1)*(n-2) 
    print ans 

Это ошибка

Traceback (most recent call last): 
    Line 1, in <module> 
    t=raw_input() 
EOFError 

Что я делаю неправильно? пожалуйста, скажите мне вот ссылка

http://codepad.org/nmL96e68

+0

codepad не имеет опции для STDIN, попробуйте http://ideone.com/z328vR. В вашей системе либо введите эти элементы вручную после запуска файла, либо используйте перенаправление оболочки: 'python file.py

+0

..и вы не можете использовать несколько двух строк, поэтому сначала конвертируйте' m' и 'n' в целые числа. –

+0

В следующий раз используйте интерпретатор * real * python вместо случайной онлайн-службы. – Bakuriu

ответ

0

Это, вероятно, то, что вы хотите достичь, если предположить m и n являются значения типа Integer,

t = input() 
for q in range(t): 
    s = raw_input() 
    m, n = map(int, s.split(' ')) 
    ans = (m * n) * (m * n - 1) 
    if m > 1 and n > 1: 
     ans -= 4 * (n - 1) * (m - 2) + 4 * (m - 1) * (n - 2) 
    print ans 
+0

спасибо, yaa, что правильно, но почему вы используете карту, я не хочу использовать карту, вот измененная ссылка, можете ли вы рассказать мне, как я преодолел эту ошибку сейчас. http://ideone.com/isvZP2 – Avneet

+0

Я предлагаю вам использовать 'map'. После исправления отступов проверьте строку 9 в коде. измените его из 'ans = 4 * (n-1) (m-2) + 4 * (m-1) * (n-2)' to 'ans - = 4 * (n-1) * (m- 2) + 4 * (m-1) * (n-2) ' –

+0

@Assians Проверьте это, http://ideone.com/KuTOrw –

1

из питона док на input:

Эквивалент Eval (raw_input (подсказка)).

Эта функция не вызывает ошибок пользователя. Если вход не является синтаксически действительным, будет увеличен SyntaxError. Другие исключения могут быть подняты, если во время оценки есть ошибка.

Таким образом, вы можете получить EOFError если ваш вход пуст.

Избегайте использования ввода в строке 1 и вместо этого используйте raw_input. Попробуйте добавить некоторые сообщения об ошибках и проверки в код, например:

import sys 
try: 
    t = int(raw_input()) 
except: 
    print "No repetition parameters set, using 1" 
    t = 1 
for q in range(t): 
    s = raw_input() 
    try: 
     m,n = s.split(' ') 
     m = int(m) 
     n = int(n) 
    except: 
     print "Invalid input, enter two integers separated by space" 
     sys.exit(1) 
    ans = (m*n)*(m*n-1) 
    if(m > 1 and n > 1): 
     ans -= 4*(n-1)*(m-2) + 4*(m-1)*(n-2) 
    print ans 

Как кто-то предложил, всегда проверять свой код на реальном интерпретатора.

+0

Здесь важна попытка/исключение, так как если пользователь нажимает RETURN без ввода какого-либо ввода, возникает EOFError. – baxeico

+0

спасибо за ваш собеседник. извините, предыдущий комментарий удален. – Avneet