Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 5, 2015 01:12:24

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Timus Online Judge и NameError

Начал решать задачки на Timus Online Judge, отсортировал по сложности и решаю с самой простой по порядку. Спустя некоторое время решил отправлять на проверку свои решения и столкнулся с такой проблемой. Почти все проверки заканчиваются ошибкой RuntimeError, при этом Pycharm в моих кодах ошибок не находит и отрабатываются все программы так как того требуют условия. В руководстве нашёл такую строчку “Поскольку язык Питон интерпретируемый, то ошибки типа NameError распознаются проверяющей системой как Runtime error, а не как Compilation error”. Почитал про NameError, но в чём проблема до сих пор не понимаю.
Может кто то сможет объяснить или хотя бы указать направления “где копать” ?
Для примера приведу ниже два кода. Первый система приняла, а вот второй опять вернула с RuntimeError.

import sys
X = ('1', '2', '3', '4', '5', '6', '7', '8')
Y = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
FIELDS = []
for x in X:
    for y in Y:
        FIELDS.append(y + x)
dx = (2, 2, -2, -2, 1, -1, 1, -1)
dy = (1, -1, 1, -1, 2, -2, -2, 2)
def all_moves(x, y):
    count = 0
    loop = 0
    while loop != 8:
        move_x = x + dx[loop]
        move_y = y + dy[loop]
        yes_no = check_move(move_x, move_y)
        if yes_no == 'yes':
            count += 1
        loop += 1
    return count
def check_move(x, y):
    if x in range(0, 8) and y in range(0, 8):
        checked_field = Y[y] + X[x]
        if checked_field in FIELDS:
            return 'yes'
def main():
    list_in = sys.stdin.read().split()
    list_out = []
    count = 0
    while count != int(list_in[0]):
        start_x = (X.index(list_in[count + 1][1]))
        start_y = (Y.index(list_in[count + 1][0]))
        list_out.append(str(all_moves(start_x, start_y)))
        count += 1
    li = '\n'.join(list_out)
    sys.stdout.write(li)
main()

from sys import stdin, stdout
data = sys.stdin.readline()
count_of_split = (int(data[0]) + 2 - 1) * (int(data[2]) + 2 - 1)
if count_of_split % 2 == 0:
    sys.stdout.write('[second]=:]')
else:
    sys.stdout.write('[:=[first]')

Офлайн

#2 Окт. 5, 2015 02:40:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Timus Online Judge и NameError

Tucha
при этом Pycharm в моих кодах ошибок не находит и отрабатываются все программы так как того требуют условия.
Вторая программа имеет неправильное импортирование:
[guest@localhost py]$ ./t.py 
Traceback (most recent call last):
File "./t.py", line 4, in <module>
data = sys.stdin.readline()
NameError: name 'sys' is not defined
[guest@localhost py]$



Офлайн

#3 Окт. 5, 2015 02:56:00

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Timus Online Judge и NameError

py.user.next
Вторая программа имеет неправильное импортирование:

Да, это я запостил уже вариант который пытался отчаянно исправить методом тыка, отправлял я в таком виде
import sys
data = sys.stdin.read()
count_of_split = (int(data[0]) + 2 - 1) * (int(data[2]) + 2 - 1)
if count_of_split % 2 == 0:
    sys.stdout.write('[second]=:]')
else:
    sys.stdout.write('[:=[first]')

и возвратили с RuntimeError

Офлайн

#4 Окт. 5, 2015 10:12:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Timus Online Judge и NameError

Потестировал. Короче, последний вариант - это

raise ValueError
Видимо, у тебя где-то исключение там выпадает на каком-то из тестов (на пятом).

Вот такой вариант со split()'ом даёт Wrong
#!/usr/bin/env python3
 
import sys
data = sys.stdin.read().split()
count_of_split = (int(data[0]) + 2 - 1) * (int(data[1]) + 2 - 1)
if count_of_split % 2 == 0:
    sys.stdout.write('[second]=:]\n')
else:
    sys.stdout.write('[:=[first]\n')



Офлайн

#5 Окт. 5, 2015 11:02:28

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Timus Online Judge и NameError

py.user.next
Потестировал
Спасибо, попробую разобраться.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version