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

Битовые операторы

20.05.2023, 23:35. Показов 1711. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В языке python существует 6 битовых (бинарных) операторов. С их помощью можно выполнять действия с двоичными числами. Напишите класс BitString, который позволит аналогичные действия выполнять со строками. Экземпляр класса принимает строку в качестве атрибута при инициализации.
Итак, нужно реализовать 6 операторов (bs и bs1 – экземпляры класса):
bs & bs1 – возвращает строку с длиной, равной меньшей из двух, в которой на каждом месте стоит меньший из двух символ в лексикографическом отношении (символы сравниваются, начиная с правого конца строк); если символу нет соответствия в другой строке, он игнорируется;
bs | bs1 – также возвращает строку с бОльшим символом из двух в лексикографическом отношении; строка имеет длину бОльшей строки;
bs ^ bs1 – у строк сравниваются символы, стоящие на одинаковых местах; если есть оба символа и они не являются одновременно гласными или одновременно согласными, то берется бОльший по алфавиту; если оба символа гласные или оба согласные, то берется меньший по алфавиту; если одного из символов нет, то берется тот, что есть; возвращается полученная строка;
bs >> n – символы в строке сдвигаются вправо на n позиций по кругу;
bs << n – сдвиг влево на n символов по кругу;
bs – инверсия символов – меняется регистр на противоположный.
__str__ – возвращает строку вида:
BitString(’<строка>’)
Первые три оператора возвращают новый экземпляр класса, последние три меняют исходный.
Ввод:

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
bs = BitString('Hello')
bs1 = BitString('Mary')
print(bs & bs1)
print(bs | bs1)
print(bs ^ bs1)
print()
bs >> 2
bs1 >> 7
print(bs, bs1, sep='\n')
print()
bs << 7
bs1 << 3
print(bs, bs1, sep='\n')
print()
print(~bs)
print(bs)
Вывод:
BitString('Malo')
BitString('Helry')
BitString('Hello')
BitString('loHel')
BitString('aryM')
BitString('Hello')
BitString('Mary')
BitString('hELLO')
BitString('hELLO')
Добавлено через 14 минут
Помогите, пожалуйста, c первыми двумя(& и |)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2023, 23:35
Ответы с готовыми решениями:

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

Реализовать функцию для транскодирования данных, содержащих битовые поля
Всем привет! Есть вот такая задача: Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо...

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

8
0 / 0 / 0
Регистрация: 20.05.2023
Сообщений: 5
21.05.2023, 12:24  [ТС]
Все операторы кроме ^ у меня реализовать получилось, а с ним все не понятно... Там же даже в выводе не может получаться Hello, там выходит Hallo
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.05.2023, 13:42
Лучший ответ Сообщение было отмечено Somebody_mad как решение

Решение

Цитата Сообщение от Somebody_mad Посмотреть сообщение
с ним все не понятно
Что там непонятного? XOR
Показывай код
0
0 / 0 / 0
Регистрация: 20.05.2023
Сообщений: 5
21.05.2023, 14:24  [ТС]
Хоть кто-то ответил, спасибо) Сейчас уже добил её, все правильно, но было не понятно с какой стороны обрезать слова, а потом сравнивать, перебрал много способов.... В итоге оказалось, что надо было убирать первые буквы из самого длинного слова, а потом сравнивать
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.05.2023, 14:37
Ну код-то покажи
0
0 / 0 / 0
Регистрация: 20.05.2023
Сообщений: 5
21.05.2023, 16:23  [ТС]
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class BitString:
    def __init__(self, string):
        self.string = string
 
    def __and__(self, other):
        min_len = min(len(self.string), len(other.string))
        result_str = ""
        for i in range(min_len):
            if self.string[-i - 1] < other.string[-i - 1]:
                result_str += self.string[-i - 1]
            else:
                result_str += other.string[-i - 1]
        return BitString(result_str[::-1])
 
    def __or__(self, other):
        max_len = max(len(self.string), len(other.string))
        result_str = ""
        for i in range(max_len):
            if i >= len(self.string):
                result_str += other.string[max_len - i - 1]
            elif i >= len(other.string):
                result_str += self.string[max_len - i - 1]
            else:
                if self.string[-i - 1] > other.string[-i - 1]:
                    result_str += self.string[-i - 1]
                else:
                    result_str += other.string[-i - 1]
        return BitString(result_str[::-1])
 
    def __lshift__(self, shift):
        rem = shift % len(self.string)
        new_string = self.string[rem:] + self.string[:rem]
        self.string = new_string
        return self
 
    def __rshift__(self, shift):
        rem = shift % len(self.string)
        new_string = self.string[-rem:] + self.string[:-rem]
        self.string = new_string
        return self
 
    def __invert__(self):
        new_string = ""
        for char in self.string:
            if char.islower():
                new_string += char.upper()
            elif char.isupper():
                new_string += char.lower()
            else:
                new_string += char
        self.string = new_string
        return self
 
    def __str__(self):
        return f"BitString('{self.string}')"
 
    def is_vowel(self, letter):
        return letter in 'aeiouyAEIOUY'
 
    def __xor__(self, other):
        result = ''
        if len(self.string) != len(other.string):
            max_len = max(len(self.string), len(other.string))
            dif = max_len - min(len(self.string), len(other.string))
            max_word = self.string if len(self.string) == max_len else other.string
            result += max_word[0: dif]
            max_word = max_word[dif:]
            min_word = self.string if len(self.string) != max_len else other.string
            for i in range(min(len(self.string), len(other.string))):
                if min_word[i] == max_word[i]:
                    result += min_word[i]
                else:
                    if self.is_vowel(min_word[i]) == self.is_vowel(max_word[i]):
                        if max_word[i] < min_word[i]:
                            result += max_word[i]
                        elif max_word[i] > min_word[i]:
                            result += min_word[i]
                    else:
                        if max_word[i] > min_word[i]:
                            result += max_word[i]
                        elif max_word[i] < min_word[i]:
                            result += min_word[i]
        else:
            for i in range(min(len(self.string), len(other.string))):
                if self.string[i] == other.string[i]:
                    result += self.string[i]
                else:
                    if self.is_vowel(self.string[i]) == self.is_vowel(other.string[i]):
                        if self.string[i] < other.string[i]:
                            result += self.string[i]
                        elif self.string[i] > other.string[i]:
                            result += other.string[i]
                    else:
                        if self.string[i] > other.string[i]:
                            result += self.string[i]
                        elif self.string[i] < other.string[i]:
                            result += other.string[i]
 
        return BitString(result)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.05.2023, 16:32
Мой варик
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
class BitString:
    def __init__(self, s: str):
        self.body = s
 
    def __or__(self, other):
        z = max(len(self.body), len(other.body))
        body = self.body.rjust(z, ' ')
        obody = other.body.rjust(z, ' ')
        return ''.join(reversed([max(body[-i], obody[-i]) for i in range(1, z + 1)]))
 
    def __and__(self, other):
        return ''.join(reversed([min(self.body[-i], other.body[-i])
                                 for i in range(1, min(len(self.body), len(other.body)) + 1)]))
 
    def __xor__(self, other):
        z = max(len(self.body), len(other.body))
        body = self.body.rjust(z, '[')
        obody = other.body.rjust(z, '[')
        res = []
        for i in range(z):
            if (body[i].lower() in 'aeiouy' and obody[i].lower() in 'aeiouy') or (
                    body[i].lower() not in 'aeiouy' and obody[i].lower() not in 'aeiouy'):
                res.append(min(body[i], obody[i], key=str.lower))
            else:
                res.append(max(body[i], obody[i], key=str.lower))
        return ''.join(res)
 
    def __lshift__(self, n):
        shift = n % len(self.body)
        self.body = self.body[shift:] + self.body[:shift]
 
    def __rshift__(self, n):
        shift = n % len(self.body)
        self.body = self.body[-shift:] + self.body[:-shift]
 
    def __invert__(self):
        self.body = self.body.swapcase()
        return str(self)
 
    def __str__(self):
        return f"BitString(’{self.body}’)"
1
0 / 0 / 0
Регистрация: 20.05.2023
Сообщений: 5
21.05.2023, 16:44  [ТС]
Ого, он гораздо проще моего будет) Я вообще, получается, в дебри полез
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
21.05.2023, 16:53
Мои наброски:

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
class BitString:
    def __init__(self, string):
        self.string = string
 
    def __and__(self, bs):
        res = [ min(a,b) for a,b in zip(reversed(self.string), reversed(bs.string)) ]
        res = ''.join(reversed(res))
        return BitString(res)
 
    def __or__(self, bs):
        a, b = sorted([self.string, bs.string], key=len)
        res = [ max(i,j) for i,j in zip(reversed(a), reversed(b)) ]
        res = b[:len(b)-len(a)] + ''.join(reversed(res))
        return BitString(res)
 
    def __xor__(self, bs):
        is_vowel = lambda x: x.lower() in 'aeiouy'
        to_max = lambda x,y: is_vowel(x) - is_vowel(y)
        xor_symb = lambda x,y: max(x,y) if to_max(x,y) else min(x,y)
        a, b = sorted([self.string, bs.string], key=len)
        res = [xor_symb(i, j) for i, j in zip(reversed(a), reversed(b))]
        res = b[:len(b)-len(a)] + ''.join(reversed(res))
        return BitString(res)
 
bs = BitString('Hello')
bs1 = BitString('Mary')
print( (bs & bs1).string )
print( (bs | bs1).string )
print( (bs ^ bs1).string )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2023, 16:53
Помогаю со студенческими работами здесь

Реализовать функцию для транскодирования данных, содержащих битовые поля
Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операции ...

Реализовать на питоне функцию для декодирования данных, содержащих битовые поля
Реализовать функцию для декодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операции. Неиспользуемые...

Битовые операции
Дано целое число n и целое число k. Требуется вывести 5 чисел: 1. 2k; 2. k-й бит числа n; 3. число n, в котором обнулены последние...

Битовые операции
Помогите сделать задачу по битовым операциям. Нужно ввести число, к примеру 24 и найти сколько в его двоичной форме сколько чисел '11'. ...

Реализовать функцию для транскодирования данных, содержащих битовые поля
Всем привет! Есть вот такая задача: Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru