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

Преобразование списка чисел в соответствии с набором правил

29.04.2020, 21:49. Показов 17819. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать программу для преобразования списка чисел в соответствии с некоторым набором правил.
В начале своей работы программа считывает числа. Числа записаны в строчку через пробел.
Затем к списку применяются одна из команд make_negative, square, strange_command.
Каждая из команд состоит из условия, с помощью которого выбираются числа, и преобразования, которому выбранные числа подвергаются.
Так, make_negative применяется только к положительным числам и умножает их на -1, square применяется ко всем числам и возводит их в квадрат, strange_command действует только на числа, делящиеся на 5, и увеличивает их на 1.
Постарайтесь спроектировать программу так, чтобы при добавлении новых подобных преобразований, так же определяющихся именем, условием и самим преобразованием, количество изменений в уже написанном коде было минимальным.

Пример 1

Ввод
1 0 -2 30 -4
1
make_negative

Вывод
-1 0 -2 -30 -4

Ввод

1 5 -2 0 30 -4
3
square
strange_command
square

Вывод
1 676 16 1 811801 256
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2020, 21:49
Ответы с готовыми решениями:

Преобразование списка в список простых чисел
Добрый день, уважаемые форумчане! Я в Лиспе совсем новичок, поэтому решение задач пока дается с трудом. Помогите с написанием...

Функция map, преобразование списка строк в двумерный список чисел
Вводится таблица целых чисел. Используя функцию map и генератор списков, преобразуйте список строк lst_in (см. листинг) в двумерный...

Печать списка пользователей с набором прав и интерфейсов.(из users.usr)
Добрый вечер. Стоит задача формировать отчет в который бы выводился полный список зарегистрированных пользователей с их наборами прав и...

14
2 / 2 / 0
Регистрация: 05.05.2020
Сообщений: 31
10.05.2020, 23:02
кто нибудь в итоге решил?(тема актуальна)
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
10.05.2020, 23:27
angelinaaaa, а шо тут сложного? На каком этапе у Вас трудность?
0
0 / 0 / 0
Регистрация: 04.04.2020
Сообщений: 5
11.05.2020, 14:20
Вот мой код, но выводит ошибку wrong-answer, пишет Different number of lines: out = 0, corr = 1
Подскажите пожалуйста, как исправить программу
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Digits:
    
    def __init__(self, a):
        self.a = a
        self.a = a.split(' ')
        
    def make_negative(self):
        for numbers in self.a:
            numbers = int(numbers)
            if numbers > 0:
                return numbers * -1
            
    def square(self):
        for elem in self.a:
            elem = int(elem)
            return elem ** 2
        
    def strange_command(self):
        for digit in self.a:
            digit = int(digit)
            if digit % 5 == 0:
                return digit + 1
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
11.05.2020, 14:21
Цитата Сообщение от piece_of_idiocy Посмотреть сообщение
Вот мой код, но выводит ошибку
сколько вы написали своих тестов, как проверяли свой код? примеры данные в описании проходят?
0
14 / 11 / 3
Регистрация: 23.11.2018
Сообщений: 15
18.05.2020, 11:51
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
class Digits:
 
    def __init__(self, a):
        self.a = [int(x) for x in a.split()]
 
    def make_negative(self):
        for i in range(len(self.a)):
            self.a[i] = -abs(self.a[i])
 
    def square(self):
        for i in range(len(self.a)):
            self.a[i] = (self.a[i]) ** 2
 
    def strange_command(self):
        for i in range(len(self.a)):
            if self.a[i] % 5 == 0:
                self.a[i] += 1
 
    def stringify(self):
        for i in range(len(self.a)):
            self.a[i] = str(self.a[i])
 
 
d = Digits(input())
for i in range(int(input())):
    s = input()
    if s == 'make_negative':
        d.make_negative()
    elif s == 'square':
        d.square()
    else:
        d.strange_command()
d.stringify()
print(' '.join(d.a))
0
5 / 5 / 0
Регистрация: 07.11.2021
Сообщений: 21
19.04.2022, 12:45
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
class Zadacha:
 
    def __init__(self, chisla):
        self.chisla = chisla.split()
 
    def make_negative(self):
        a = []
        for i in self.chisla:
            if int(i) > 0:
                a.append(-int(i))
            else:
                a.append(int(i))
        self.chisla = a
 
    def square(self):
        a = []
        for i in self.chisla:
            a.append(int(i) ** 2)
        self.chisla = a
 
    def strange_command(self):
        a = []
        for i in self.chisla:
            if int(i) % 5 == 0:
                a.append(int(i) + 1)
            else:
                a.append(int(i))
        self.chisla = a
 
    def vernut(self):
        return self.chisla
 
 
z = Zadacha(input())
for i in range(int(input())):
    s = input()
    if s == 'make_negative':
        z.make_negative()
    elif s == 'square':
        z.square()
    elif s == 'strange_command':
        z.strange_command()
print(*z.vernut())
0
0 / 0 / 0
Регистрация: 11.11.2023
Сообщений: 8
10.04.2024, 20:15
Очень простой код для таких как я "чайников", мб кому то надо
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
def make_negative():
    global v
    for x1 in range(len(v)):
        if int(v[x1]) > 0:
            v[x1] = int(v[x1]) * -1
 
 
def square():
    global v
    for x1 in range(len(v)):
        v[x1] = v[x1] ** 2
 
 
def strange_command():
    global v
    for x1 in range(len(v)):
        if v[x1] % 5 == 0:
            v[x1] = v[x1] + 1
 
 
z = input().split()
v = []
for x in z:
    v.append(int(x))
for x in range(int(input())):
    c = input()
    if c == 'make_negative':
        make_negative()
    if c == 'square':
        square()
    if c == 'strange_command':
        strange_command()
print(*v)
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
10.04.2024, 21:17
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def _(mapper, predicate=lambda ignore: True):
    def nested(list_):
        for i, x in enumerate(list_):
            if predicate(x):
                list_[i] = mapper(x)
    return nested
    
commands = {
    "make_negative": _(lambda x: x * (-1), lambda x: x > 0),
    "square": _(lambda x: x ** 2),
    "strange_command": _(lambda x: x + 1, lambda x: x % 5 == 0),
}
a = [int(x) for x in input().split()]
n = int(input())
for _ in range(n):
    commands[input()](a)
    
print(*a)
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
10.04.2024, 22:59
Цитата Сообщение от lexer42 Посмотреть сообщение
Очень простой код для таких как я "чайников", мб кому то надо
lexer42, неверно, вы не учли условие
Цитата Сообщение от edyaqq Посмотреть сообщение
Постарайтесь спроектировать программу так, чтобы при добавлении новых подобных преобразований, также определяющихся именем, условием и самим преобразованием, количество изменений в уже написанном коде было минимальным.
как и все вышеписавшие.
Вы зашили условие команды в функцию команды, а ведь добавляемая команда может иметь условие или функцию, которые уже есть, и получится дублирование кода.

Вот так правильнее:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
criterions = ['x > 0', 'x%5==0', 'True']
functions = [lambda x: -x, lambda x: x*x, lambda x: x+1]
d = {'make_negative': (criterions[0], functions[0]),
     'square': (criterions[2], functions[1]),
     'strange_command': (criterions[1], functions[2])}
 
*arr, = map(int, input('Массив->').split())
n = int(input('Количество команд: '))
commands = []
for _ in range(n):
    commands.append(input('->'))
for comm in commands:
    cond, fun = d[comm]
    i = 0
    while i < len(arr):
        x = arr[i]
        if eval(cond):
            arr[i] = fun(x)
        i += 1
 
print(arr)
Arsegg, ну или так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
criterions = ['x > 0', 'x%5==0', 'True']
functions = [lambda x: -x, lambda x: x*x, lambda x: x+1]
critfun_of_comm = {'make_negative': (0,0),
     'square': (2,1),
     'strange_command': (1,2)}
 
def f(critfun, list_):
    for i,x in enumerate(list_):
        if eval(criterions[critfun[0]]):
            list_[i] = functions[critfun[1]](x)
    return list_
 
*arr, = map(int, input('Массив->').split())
for _ in range(int(input('Количество команд: '))):
    arr = f(critfun_of_comm[input('->')], arr)
 
print(*arr)
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
10.04.2024, 23:10

Не по теме:

Цитата Сообщение от idealist Посмотреть сообщение
eval
Фи2


0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
10.04.2024, 23:12
Цитата Сообщение от Arsegg Посмотреть сообщение
Фи2
Да тьфу!
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
10.04.2024, 23:36
idealist, паттерн "Интерпретатор" тут явно лишний, т. к. в задаче это не требовалось.
P. S. Преобразования можно было оформить в виде классов с выделением общей логики в абстрактный класс, правда через замыкания красивее, имхо.
0
0 / 0 / 0
Регистрация: 11.11.2023
Сообщений: 8
11.04.2024, 02:18
idealist, я всегда стараюсь идти по пути наименьшего сопротивления, если бы система не приняла мой код то пришлось бы переделать, но я не боюсь переписать заново код ибо может придти больше идей для реализования кода
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
11.04.2024, 06:16
Еще вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
criterions = [lambda x: x>0, lambda x: True, lambda x: x%5==0]
functions = [lambda x: -x, lambda x: x*x, lambda x: x+1]
critfun_of_comm = {'make_negative': (0,0),
                   'square': (1,1),
                   'strange_command': (2,2)}
 
def f(critfun, list_):
    for i,x in enumerate(list_):
        if criterions[critfun[0]](x):
            list_[i] = functions[critfun[1]](x)
    return list_
 
*arr, = map(int, input('Массив->').split())
for _ in range(int(input('Количество команд: '))):
    arr = f(critfun_of_comm[input('->')], arr)
 
print(*arr)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2024, 06:16
Помогаю со студенческими работами здесь

Преобразование массива в соответствии с маской
Даны одномерный массив чисел А и одномерная &quot;маска&quot; (массив из чисел 0, 1, 2) M одной длины N. Преобразуйте массив A в соответствии с...

Преобразование содержимого ячейки в соответствии с выбранной функцией
Доброго времени суток уважаемые форумчане! Подскажите пожалуйста как сделать так чтобы вычисляемое поле в запросе воспринимало соседнюю...

Преобразование кода php, в соответствии с подходом mvc
Кто умеет преобразовывать php,в соответствии mvc?

Проверить, является ли второй список набором литеральных атомов из первого списка, перечисленных в том же порядке
Напишите бинарный предикат, истинный, если второй список есть набор литеральных атомов из первого списка, перечисленный в том же порядке,...

Класс с набором целых чисел
Создайте класс, содержащий набор целых чисел. В классе должна быть реализована следующая функциональность: ■ Сумма элементов набора. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
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 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru