Top.Mail.Ru
Ответы

Задачка по пайтону, где ошибка?

Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и смотрим на север. Нам известно, где закопан клад, но этого мало: остров полон опасностей, и нужно перемещаться строго по указаниям карты, которая, к счастью, тоже имеется в нашем распоряжении. Мы хотим найти клад как можно скорее.
Известны координаты клада и указания, которым нужно следовать, чтобы его найти. Каждое указание карты состоит из одного слова и, возможно, одного натурального числа. Слово — одно из набора: «вперёд», «налево», «направо», «разворот».
После слова «вперёд» следует количество шагов, которое следует пройти в том направлении, куда мы в данный момент смотрим. Слова «налево» или «направо» означают, что нужно изменить направление взгляда под прямым углом, «разворот» — что прямо на обратное.
Найдите минимальное количество указаний карты, которое нужно выполнить, чтобы прийти к кладу.
Формат ввода Сначала вводятся два числа на отдельных строчках: координаты клада по оси икс (запад-восток) и игрек (юг-север).
Затем следует некоторое количество указаний карты. Каждое указание карты состоит из одного слова и, возможно, одного натурального числа на отдельной строке. Слово — одно из набора: «вперёд», «налево», «направо» или «разворот».
Формат вывода
Программа выводит на отдельных строках минимальное количество указаний карты, которое нужно выполнить, чтобы прийти к кладу, и направление взгляда в этот момент (одно из: «север», «юг», «запад», «восток»). Гарантируется, что карта приводит к кладу.

instructions = 0
x = int(input())
y = int(input())
x1 = 0
y1 = 0
move = 'север'
direction = input()
while True:
if int(x) == x1 and int(y) == y1:
print(instructions)
print(move)
break
else:
instructions += 1
if direction == 'вперёд':
steps = int(input())
if move == 'север':
y1 += steps
elif move == 'запад':
x1 -= steps
elif move == 'юг':
y1 -= steps
elif move == 'восток':
x1 += steps
elif direction == 'направо':
if move == 'север':
move = 'восток'
elif move == 'восток':
move = 'юг'
elif move == 'юг':
move = 'запад'
elif move == 'запад':
move = 'север'
elif direction == 'налево':
if move == 'север':
move = 'запад'
elif move == 'запад':
move = 'юг'
elif move == 'юг':
move = 'восток'
elif move == 'восток':
move = 'север'
elif direction == 'разворот':
if move == 'север':
move = 'юг'
elif move == 'юг':
move = 'север'
elif move == 'запад':
move = 'восток'
elif move == 'восток':
move = 'запад'
direction = input()
Выводит:
Traceback (most recent call last):
File "/temp/executing/solution.py", line 52, in <module>
direction = input()
^^^^^^^
EOFError: EOF when reading a line
make: *** [Makefile:5: run] Error 1

Где ошибка??? Как исправить ее??

По дате
По Рейтингу
Аватар пользователя
Новичок
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
 instructions = 0 
x = int(input()) 
y = int(input()) 
x1 = 0 
y1 = 0 
move = 'север' 
while True: 
    if int(x) == x1 and int(y) == y1: 
        print(instructions) 
        print(move) 
        break 
    else: 
        instructions += 1 
        if instructions > 1000:  # Допустим, максимальное количество указаний 
            print("Превышено максимальное количество указаний.") 
            break 
 
        direction = input() 
        if direction == 'вперёд': 
            steps = int(input()) 
            if move == 'север': 
                y1 += steps 
            elif move == 'запад': 
                x1 -= steps 
            elif move == 'юг': 
                y1 -= steps 
            elif move == 'восток': 
                x1 += steps 
        elif direction == 'направо': 
            if move == 'север': 
                move = 'восток' 
            elif move == 'восток': 
                move = 'юг' 
            elif move == 'юг': 
                move = 'запад' 
            elif move == 'запад': 
                move = 'север' 
        elif direction == 'налево': 
            if move == 'север': 
                move = 'запад' 
            elif move == 'запад': 
                move = 'юг' 
            elif move == 'юг': 
                move = 'восток' 
            elif move == 'восток': 
                move = 'север' 
        elif direction == 'разворот': 
            if move == 'север': 
                move = 'юг' 
            elif move == 'юг': 
                move = 'север' 
            elif move == 'запад': 
                move = 'восток' 
            elif move == 'восток': 
                move = 'запад' 
 
Аватар пользователя
Высший разум

Вариант, когда достаточно пройти над кладом:

123456789101112131415161718
 finish = [int(input()), int(input())]
position, delta = [0, 0], [[0, 1], [1, 0], [0, -1], [-1, 0]]
turn = {'налево': 3, 'направо': 1, 'разворот': 2}
count, distance, direction = 0, 0, 0
while position != finish:
    if distance:
        position[0] += delta[direction][0]
        position[1] += delta[direction][1]
        distance -= 1
        continue
    action = input()
    count += 1
    if action in turn:
        direction = (direction + turn[action]) % 4
    else:
        distance = int(input())
print(count)
print(['север', 'восток', 'юг', 'запад'][direction]) 

Работа кода не проверялась.