Странное поведение программы в Python - PullRequest
0 голосов
/ 11 июня 2009

При выполнении следующего кода, который является простой проблемой, интерпретатор Python работает странно:

n = input()
for i in range(n):
    testcase = raw_input()
    #print i
    print testcase[2:(int(testcase[0])+1)]+testcase[(int(testcase[0])+2):]

Проблема состоит в том, чтобы взять n строк и удалить из них один символ. Например, учитывая строку «4 PYTHON», программа должна вывести «PYTON». Код работает нормально, но если я уберу метку комментария, оператор print i заставит интерпретатор дать неожиданный EOF при разборе. Есть идеи, почему это происходит?

РЕДАКТИРОВАТЬ: я работаю под Python 2.5, 32 бита в Windows.

Ответы [ 3 ]

4 голосов
/ 11 июня 2009

Вы уверены, что проблема заключается в заявлении print i? Код работает как ожидается, когда я раскомментирую это утверждение и запусту его. Однако, если я забуду введите значение для первого вызова input () и сразу же введите «4 PYTHON» бита, тогда я получаю:

"SyntaxError: unexpected EOF while parsing"

Это происходит потому, что input () не просто сохраняет введенный вами текст, но и работает eval () на нем. И "4 PYTHON" не является допустимым кодом Python.

1 голос
/ 13 июня 2009

Я еще один, у кого нет проблем с комментированным заявлением о печати. Функция ввода в первой строке не проблема, если я даю ей что-то, что Python может оценить. Поэтому наиболее вероятное объяснение состоит в том, что когда вы получаете эту ошибку, вы набрали что-то, что не является допустимым выражением Python.

Вы всегда получаете эту ошибку? Можете ли вы опубликовать стенограмму вашего интерактивного сеанса с трассировкой стека?

1 голос
/ 11 июня 2009

Это сработало и у меня, попробуй ...

n = raw_input()
n = int(n)
for i in range(n):
  testcase = raw_input()
  print i
  print testcase[2:(int(testcase[0])+1)]+testcase[(int(testcase[0])+2):]

Обратите внимание на n = int(n)

PS: вы можете продолжать использовать n = input() в первой строке; я предпочитаю raw_input.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...