Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 31

Ошибка в выполнении кода

06.03.2024, 19:46. Показов 751. Ответов 6

Студворк — интернет-сервис помощи студентам
Само задание:
Исполнитель Муравей «живёт» на поле размером 8×8 клеток,
пронумерованных так же, как клетки шахматной доски (вертикали
обозначаются слева направо буквами от a до h, горизонтали – снизу
вверх цифрами от 1 до 8). Команды исполнителя:
ВЛЕВО К
ВПРАВО К
ВВЕРХ К
ВНИЗ К
Здесь К – целое неотрицательное число – количество «шагов»
Муравья в заданном направлении. Если при выполнении команды
Муравей пытается выйти за пределы доски, то выдаётся сообщение
об ошибке: «Не могу выполнить команду» и Муравей останавливается на последнем достигнутом поле.
В текстовом файле указано начальное положение Муравья и приведена программа для него. Определить, сможет ли Муравей корректно выполнить эту программу, и на каком поле он окажется после
выполнения программы?
Примеры
1. Начальное положение: клетка a1, программа: ВПРАВО 5, конечное положение: клетка f1.
2. Начальное положение: клетка g4, программа: ВВЕРХ 5, конечное положение: клетка g8, при этом произошёл останов по ошибке.

Мое решение:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
f = open('dat.txt', 'w')
f.write(input('Начальное положение: '))
f.write('\n')
f.write(input('Команда: '))
f.close()
 
f=open('dat.txt', 'r')
pos = f.readline().strip().split()
pos = [ord(pos[0])- ord('a'), int(pos[1])-1]
command = f.readline().strip().split()
dir = command[0]
steps = int(command[1])
 
for i in range(steps):
    if dir == 'left' and pos[0] - i >= 0:
        pos[0] -= i
    elif dir == 'right' and pos[0] + i <= 7:
        pos[0] += i
    elif dir == 'up' and pos[1] + i <= 7:
        pos[1] += i
    elif dir == 'down' and pos[1] - i >= 0:
        pos[1] -= i
    if pos[1] - i < 0 or pos[1] + i > 7 or pos[0] + i > 7 \
            or pos[0] - i < 0: print('Не могу выполнить команду')
 
print(chr(pos[0] + ord('a')),pos[1]+1)
f.close()
Работает почти верно, но почемуто на 1 увеличивает конечную клетку, и хз как исправить то, что при каждом шаге выдает 'Не могу выполнить команду'
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.03.2024, 19:46
Ответы с готовыми решениями:

Ошибка при выполнении кода
Написала код, но в конечном итоге он выдал две ошибки, которые мне, будучи не программистом, сложно расшифровать line 121, in...

Выскакивает ошибка при выполнении кода
дана задача: 2. Создайте два списка: один из 10 фамилий студентов Вашей группы, другой из 10 фамилий студентов другой группы. 2.1....

Как сделать, чтобы при выполнении кода содержимое сразу подставлялось в нужную часть кода и выполнялось?
Нужно чтобы при выполнении кода, содержимое буфера обмена сразу добавлялось в значении X и выполняло команду из строчки s=&quot;start...

6
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.03.2024, 20:27
Цитата Сообщение от xd000 Посмотреть сообщение
f = open('dat.txt', 'w')
f.write(input('Начальное положение: '))
f.write('\n')
f.write(input('Команда: '))
f.close()
Зачем этот код?
0
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 31
06.03.2024, 21:02  [ТС]
Создание файла с нач. положением и командой
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
07.03.2024, 05:38
Имена файлов не перепутаны?
0
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 31
07.03.2024, 07:30  [ТС]
нет
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
07.03.2024, 09:45
Лучший ответ Сообщение было отмечено xd000 как решение

Решение

Ну, так можно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
DIM = 8
def pos_to_str(pos):
    i, j = pos
    return chr(ord('a') + j) + str(DIM - i)
 
def str_to_pos(s):
    j = ord(s[0]) - ord('a')
    i = DIM - int(s[1])
    return [i,j]
 
def exec_commands(pos, lines):
    def pos_is_good(pos):
        i,j = pos
        return i in range(DIM) and j in range(DIM)
 
    for command_line in lines:
        dir, val = command_line.strip().split()
        val = int(val)
        for k in range(val):
            prev_pos = pos.copy()
            match dir:
                case 'ВЛЕВО':
                    pos[1] -= 1
                case 'ВПРАВО':
                    pos[1] += 1
                case 'ВВЕРХ':
                    pos[0] -= 1
                case 'ВНИЗ':
                    pos[0] += 1
            if not pos_is_good(pos):
                print('Не могу выполнить команду')
                print(pos_to_str(prev_pos))
                return
    print(pos_to_str(pos))
 
with open('dat.txt', 'w') as f:
    f.write(input('Начальное положение (например a1): '))
    f.write('\n')
    n = int(input('Количество команд: '))
    comm_arr = ['ВЛЕВО', 'ВПРАВО', 'ВВЕРХ', 'ВНИЗ']
    for i in range(n):
        print(f'Ввод команды {i+1} вида "ВЛЕВО K", где K - натуральное число:')
        dir_num = int(input(f'\tВведите номер направления (1..4) из списка {comm_arr}: '))
        val = int(input('\tзначение K: '))
        s = f'{comm_arr[dir_num-1]} {val}'
        print(f'Введена команда "{s}"')
        print()
        f.write(s)
        f.write('\n')
 
with open('dat.txt', 'r') as f:
    lines = f.readlines()
 
pos_line = lines.pop(0)
pos = str_to_pos(pos_line)
exec_commands(pos, lines)
1
0 / 0 / 0
Регистрация: 25.04.2021
Сообщений: 11
12.03.2024, 20:15
Друзья, доброго времени суток
Понимаю, что мой ответ немного запоздалый
Я в шахматах не очень силен, тем более, не могу играть вслепую.
Вот и здесь, когда задано сразу несколько команд для муравья,
трудно сообразить, на какой именно команде он добрел до края доски
и не может идти дальше.
Предлагаю программку, в которой отслеживается поле сразу после
выполнения каждой команды.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
[PYTHON]
 
def hod_left_right(start_pole, vector, n_shag):
    n = int(n_shag)
    if vector == "ВЛЕВО":
        n *= -1
    nabor = ["a","b","c","d","e","f","g","h"]
    for i in range(8):
        if start_pole[0] == nabor[i]:
            n1 = i
    if n1 + n < 0:
        fin_pole = "a" + start_pole[1]
        return fin_pole, False
    if n1 + n > 7:
        fin_pole = "h" + start_pole[1]
        return fin_pole, False
    fin_pole = nabor[n1 + n] + start_pole[1]    
    return fin_pole, True
 
def hod_up_down(start_pole, vector,n_shag):
    n = int(n_shag)
    if vector == "ВНИЗ":
        n *= -1
    n1 = int(start_pole[1])
    if n1 + n < 1:
        fin_pole = start_pole[0] + "1"
        return fin_pole, False
    if n1 + n > 8:
        fin_pole = start_pole[0] + "8"
        return fin_pole, False
    fin_pole = start_pole[0] + str(n + n1)
    return fin_pole, True
 
with open("Муравей.txt", "w") as f:
    f.write(input("Укажите исходное поле:"))
 
vectors = {
    1: "ВПРАВО",
    2: "ВЛЕВО",
    3: "ВВЕРХ",
    4: "ВНИЗ",
}
 
with open("Муравей.txt", "r") as f:
    start_pole = f.readline()
 
print("Вы на поле " + start_pole)
 
while True:
    s = input("Нажмите 0 для выхода из программы\nили любую клавишу для продолжения")
    if s == "0":
        break
    s = input("Куда пойдем?(укажите направление)\n1 - ВПРАВО\n2 - ВЛЕВО\n3 - ВВЕРХ\n4 - ВНИЗ\nВвести цифру: ")
    s1 = input("Сколько шагов: ")
    with open("Муравей.txt", "a") as f:
        f.write("\n" + vectors.get(int(s)) + " " + s1)
    with open("Муравей.txt", "r") as f:
        txt = f.read()
        txt = txt.split()
        if txt[-2] == "ВЛЕВО" or txt[-2] == "ВПРАВО":
            start_pole, norm = hod_left_right(start_pole, txt[-2], txt[-1])
        else:
            start_pole, norm = hod_up_down(start_pole, txt[-2], txt[-1])
        print("Вы на поле " + start_pole)       
        if norm == False:
            print("-Ох, доска кончается,\nСейчас я упаду\n                  (Агния Барто)")
            break
[/PYTHON]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2024, 20:15
Помогаю со студенческими работами здесь

Ошибка при выполнении кода
f = open(&quot;27-70a.txt&quot;) N = int(f.readline()) s = 0 dMin = 501 M = for i in range(N): a, b =...

Ошибка при выполнении кода
Почему не работает такой код: def max_number(x, y): if x &gt; y: return x else: return y x =...

Ошибка при выполнении кода
В попытках поэкспериментировать с распознаванием элементов на изображении был найден следующий код использующий библиотеки pixellib и...

Ошибка при выполнении кода ValueError
f = open(&quot;27-70a.txt&quot;) N = int(f.readline()) s = 0 dMin = 501 M = for i in range(N): a, b = map(int,...

Ошибка при выполнении кода по распознаванию предметов на веб-камере
Добрый день. Столкнулся с новой проблемой. При попытке запустить в Anaconda Powershell Promt (Anaconda 3) код распознающий предметы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru