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

Напишите программу для робота

07.02.2024, 23:15. Показов 35134. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Робот находится на клеточном поле без стен. Программа для робота составлена из команд движения move_right(), move_left(), move_down(), move_up() и циклов for с одним неотрицательным параметром, внутри которых может быть любое количество команд движения. Вложенных циклов в программе нет. Названия переменных цикла for — из одного символа.
Гарантируется, что программа верна, в ней нет синтаксических ошибок и могут встречаться пустые строки. Они нужны, чтобы визуально разделить код на несколько частей.
Каждая команда движения перемещает робота в соседнюю клетку в соответствующем направлении. Производители робота пошли навстречу программистам и добавили четыре команды вида move_right(N), которая передвигает робота в нужном направлении на N шагов (N — положительное целое число больше 1).
Последняя строка в программе — комментарий, который начинается с символа #. Других таких строк в программе нет.
Эту программу для робота надо сократить и заменить её на более короткую и при этом перемещающую робота в ту же клетку.
Ваша задача — написать на Python программу, которая это сделает.
Вашей программе на вход даётся несколько строк на Python со строкой-комментарием в конце.
Требуется вывести код программы, которая составлена по тем же правилам, что и исходная, перемещает робота в ту же клетку и имеет наименьшее возможное количество строк.
Если такую короткую программу можно составить разными способами с одинаковым количеством строк, выведите любой подходящий вариант. В каждой строке ответа разрешается ставить только одну команду движения или заголовок цикла for.

Шпаргалка по синтаксису:

Прочитать строку: s = input()
Прочитать целое число: x = int(input())
Арифметические операции: a + b, a - b, a * b, a // b (деление с округлением вниз), a % b (остаток от деления)
Присваивание: a = a + 1, a = b + (c - d) // 2, s = 'ауоиэыяюеё'
Вывод: print(a) — можно вывести значение любого типа.
print(a, a + b, a - b) — можно вывести значения нескольких выражений, они будут разделены пробелом.
Операции со строками:
s1 + s2 (сложение)
s * 10 (умножение на число)
if s1 in s2: (проверка того, что s1 есть в s2)
if s1 == s2: (проверка того, что s1 равна s2)
if s1 != s2: (проверка того, что s1 равна s2)
Методы строк:
s.find(s1) — возвращает индекс первого слева вхождения строки s1 в строку s. Если s1 не входит в s⁠, возвращает -1.
s.rfind(s1) — возвращает индекс первого справа вхождения строки s1 в строку s. Если s1 не входит в s⁠⁠, возвращает -1.
s.count(s1) — сколько раз s1 входит в s.
s.replace(s1, s2) — возвращает строку s, в которой все вхождения s1 заменены на s2.
Цикл по строке: for char in s: — переменная char создаётся для работы цикла и принимает значение каждого символа строки по очереди, слева направо.
Индексы строки: s[k] символ с индексом k (индексация начинается с нуля)
Цикл по строке при помощи range:
for k in range(len(s)): — переменная k пробегает все индексы строки s.
Цикл while:
while УСЛОВИЕ:
`набор команд`


Ввод

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
move_right()
move_right()
move_right()
move_down()
for k in range(8):
     move_up()
move_left()
for k in range(3):
    move_left()
move_down()
for k in range(2):
    move_down()
move_right()
# это последняя строка
Python
1
2
3
move_right()
move_left()
# конец программы
Python
1
2
3
4
5
6
move_right(7)
for k in range(4):
    move_left(2)
    move_up()
move_down(6)
# конец программы
Вывод

Python
1
move_up(4)
Python
1
#
Python
1
2
move_left()
move_down(2)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2024, 23:15
Ответы с готовыми решениями:

Напишите программу для решения задачи
Задача:

Напишите программу для вычисления выражения
Напишите программу для вычисления выражения z = tg(x) + tg(x2) + tg(x3) + ... + tg(xn) Используйте свою функцию для тангенса.

Напишите программу для расшифровки сообщений
Направленное излучение пронизывало земную атмосферу, образуя постоянный канал для приёма и передачи на внешние станции, служивший вместо...

17
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
08.02.2024, 08:05
Цитата Сообщение от Nestorinka Посмотреть сообщение
Гарантируется, что программа верна, в ней нет синтаксических ошибок
Цитата Сообщение от Nestorinka Посмотреть сообщение
N — положительное целое число больше 1
- Здесь есть неустранимое противоречие, а именно:
Цитата Сообщение от Nestorinka Посмотреть сообщение
for k in range(8)
- и другие подобные циклы, в программе из примера
например, проверьте, какие числа будет генерировать этот цикл:
Python
1
2
for k in range(8):
    print(k)
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
08.02.2024, 09:00
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
text = '''move_right()
move_right()
move_right()
move_down()
for k in range(8):
     move_up()
move_left()
for k in range(3):
    move_left()
move_down()
for k in range(2):
    move_down()
move_right()
# это последняя строка'''
 
def move_right(n = 1):
    global x
    x += n
 
def move_left(n = 1):
    global x
    x -= n
 
def move_up(n = 1):
    global y
    y += n
 
def move_down(n = 1):
    global y
    y -= n
 
x = 0
y = 0
exec(text)
res = []
if x == y == 0:
    res.append('#')
else:
    if x:
        res.append(f'{"move_right" if x > 0 else "move_left"}({"" if abs(x) == 1 else abs(x)})')
    if y:
        res.append(f'{"move_up" if y > 0 else "move_down"}({"" if abs(y) == 1 else abs(y)})')
for e in res:
    print(e)
1
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
08.02.2024, 09:10
Цитата Сообщение от YuS_2 Посмотреть сообщение
Здесь есть неустранимое противоречие
А, хотя... поправляюсь, это не противоречие, там же не используются числа, просто по одному шагу, без использования числа из переменной k, как значения N...
Т.е. всё верно в условиях...
0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
19.02.2024, 19:42
А как вводить ?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
19.02.2024, 19:48
Цитата Сообщение от cloun_zxc Посмотреть сообщение
А как вводить ?
А вам как задали вводить?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
20.02.2024, 08:02

Не по теме:

Цитата Сообщение от cloun_zxc Посмотреть сообщение
А как вводить ?
Дааа. Когда-то все мы задавались этим вопросом....


0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
22.02.2024, 11:02
Я не понимаю как в этой ситуации вводить

Добавлено через 10 минут
Там нету ввода можешь скинуть целиковый код
0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
22.02.2024, 21:20
Оно отдельными строками вводиться ,а не сразу в программе
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
22.02.2024, 22:18
Цитата Сообщение от cloun_zxc Посмотреть сообщение
Там нету ввода можешь скинуть целиковый код
Ну, можно из файла загрузить:
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
def move_right(n=1):
    global x
    x += n
 
def move_left(n=1):
    global x
    x -= n
 
def move_up(n=1):
    global y
    y += n
 
def move_down(n=1):
    global y
    y -= n
 
x = 0
y = 0
with open('111.txt', 'r') as f:
    text = f.read()
exec(text)
res = []
if x == y == 0:
    res.append('#')
else:
    if x:
        res.append(f'{"move_right" if x > 0 else "move_left"}({"" if abs(x) == 1 else abs(x)})')
    if y:
        res.append(f'{"move_up" if y > 0 else "move_down"}({"" if abs(y) == 1 else abs(y)})')
for e in res:
    print(e)
0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
22.02.2024, 22:38
Чтобы вводилось в консоль ... строчка за строчкой
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
23.02.2024, 01:29
Цитата Сообщение от cloun_zxc Посмотреть сообщение
в консоль ... строчка за строчкой
Вот так вроде работает. Конец ввода - ввод пустой строки. Только нужно следить, чтобы строки, имеющие в начале отступы, вводились обязательно с этими отступами, иначе при выполнении кода будет синтаксическая ошибка:
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
def move_right(n=1):
    global x
    x += n
 
def move_left(n=1):
    global x
    x -= n
 
def move_up(n=1):
    global y
    y += n
 
def move_down(n=1):
    global y
    y -= n
 
x = 0
y = 0
text = ''
while s := input('->'):
    text += s + '\n'
exec(text)
res = []
if x == y == 0:
    res.append('#')
else:
    if x:
        res.append(f'{"move_right" if x > 0 else "move_left"}({"" if abs(x) == 1 else abs(x)})')
    if y:
        res.append(f'{"move_up" if y > 0 else "move_down"}({"" if abs(y) == 1 else abs(y)})')
for e in res:
    print(e)

А кстати, чем объясняется столь огромное количество показов данной темы (15458) ведь ей всего две недели. Другие темы со сравнимым количеством показов имеют возраст по нескольку лет!
0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
23.02.2024, 11:39
""А кстати, чем объясняется столь огромное количество показов данной темы (15458) ведь ей всего две недели. Другие темы со сравнимым количеством показов имеют возраст по нескольку лет!""
- Эта задача в олимпиаде по программирования для 7-11 классов в Яндекс учебнике....

Оно выдает ошибку почему-то:
NameError("name 'x' is not defined")
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
23.02.2024, 12:42
Цитата Сообщение от cloun_zxc Посмотреть сообщение
Оно выдает ошибку почему-то:
NameError("name 'x' is not defined")
Не знаю, у меня работает. А вы какую программу вводили?
0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
23.02.2024, 12:52
move_right()
move_right()
move_right()
move_down()
for k in range(8):
move_up()
move_left()

move_right(2)
move_up(7)


Проблема в том что там могут быть пустые строки и если пустая строка оно выводит результаты ... а должно с # И какой-то текст, а так выводит все правильно
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
23.02.2024, 12:57
cloun_zxc, ну, я ввел эту же программу, у меня сработало:
Python
1
2
3
4
5
6
7
8
9
10
->move_right()
->move_right()
->move_right()
->move_down()
->for k in range(8):
->    move_up()
->move_left()
->
move_right(2)
move_up(7)
0
3 / 3 / 1
Регистрация: 18.02.2023
Сообщений: 31
23.02.2024, 13:04
Я гоаорю все хорошо но оно должно не на пустую строку срабатывать а на
move_right(7)
for k in range(4):
move_left(2)
move_up()
move_down(6)
# конец программы <----- Эту строку с 1 символом "#"
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
23.02.2024, 15:49
Цитата Сообщение от cloun_zxc Посмотреть сообщение
оно должно не на пустую строку срабатывать а на
Цитата Сообщение от cloun_zxc Посмотреть сообщение
# конец программы <----- Эту строку
А сами не догадались как переделать?
А почему вы вместо питоновского кода кракозябры какие-то печатаете? Почитайте как код вставлять в сообщения.

Вот так строку с первым символом решеткой воспринимает как конец ввода:
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
def move_right(n=1):
    global x
    x += n
 
def move_left(n=1):
    global x
    x -= n
 
def move_up(n=1):
    global y
    y += n
 
def move_down(n=1):
    global y
    y -= n
 
x = 0
y = 0
text = ''
while True:
    s = input('->')
    if s[0] == '#':
        break
    text += s + '\n'
exec(text)
res = []
if x == y == 0:
    res.append('#')
else:
    if x:
        res.append(f'{"move_right" if x > 0 else "move_left"}({"" if abs(x) == 1 else abs(x)})')
    if y:
        res.append(f'{"move_up" if y > 0 else "move_down"}({"" if abs(y) == 1 else abs(y)})')
for e in res:
    print(e)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2024, 15:49
Помогаю со студенческими работами здесь

Напишите программу для решения задачи
Задача Канат и Динара женятся! Они отослали всем друзьям приглашения на свадьбу. На каждом приглашении можно отметить +one — это значит,...

Напишите программу для печати информации
Напишите программу для печати информации про модуль, например, про math. Примечание. Сначала модуль необходимо импортировать

Напишите программу для сопоставления прошлого
Напишите программу для сопоставления прошлого и будущего с настоящим. Прошлое – это строки с нечетными номерами, будущее – с четными, счет...

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

Напишите программу для решения данного уравнения
Напишите программу для решения данного уравнения


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru