Форум сайта python.su
Прохожу курс по Python для начинающих. И была задача написать код функции, fed my_function( x, y). Кода этой задачки в курсе нет( На входе 2 строки: 1 строка - шаблон, 2 строка - просто набор букв. Нужно проверить, соответствует ли строка 2 шаблону и функция должна возвращать False, если не соответствует, True, если соответствует.
Пример:
1 строка: “x”
2 строка “y”
True
1 строка: “abc”
2 строка “xyz”
True
1 строка: “abcabc”
2 строка “xyzxyz”
True
1 строка: “abcabc”
2 строка “xyzxyk”
False
1 строка: “abcatk”
2 строка “xyzxmn”
True
1 строка: “aaa”
2 строка “bbbbb”
False
1 строка: “aaa”
2 строка “bbb”
True
Я надеюсь смог объяснить, потому что сам тяжело понимал задание, мозг взрывается, не знаю, с чего начать, какой алгоритм. Заранее спасибо!
Офлайн
3zerosВыясни точно задание. Что за шаблон?
Я надеюсь смог объяснить, потому что сам тяжело понимал задание
Офлайн
py.user.nextЗадачка на английском, вот перевод от Яндекса:
Прикреплённый файлы: 2.jpg (62,0 KБ)
Офлайн
3zerosПиши на английском. Переводчики могут искажать смысл.
Задачка на английском, вот перевод от Яндекса:
3zerosЭтот алгоритм не такой простой, как кажется.
не знаю, с чего начать, какой алгоритм
abc и xyz даёт True
abc и xya даёт True
abc и zyx даёт True
abc и cba даёт True
abc и acb даёт True
abc и tqx даёт True
Отредактировано py.user.next (Сен. 19, 2021 01:54:54)
Офлайн
py.user.next
Нужно первую строку проверить на совпадения символов попарно. Первый и второй, первый и третий, первый и четвёртый и так далее. И в это же время нужно проверять символы второй строки по тем же позициям. Например, если в первой строке первый и третий символ не равны, то во второй строке первый и третий символ должны быть не равны. Если в первой строке первый и пятый символ равны, то во второй строке первый и пятый символ должны быть равны. Проверяются так все возможные пары. То есть второй и третий, второй и четвёртый, второй и пятый и так далее тоже проверяются.
x = str(input()) y = str(input()) def detect_pattern(s1, s2): result = False if len(s1) != len(s2): result = False else: for i,j in zip(range(len(s1)),range(len(s2))): for i2,j2 in zip(range(len(s1)),range(len(s2))): if s1[i] == s1[i2] and s2[j] == s2[j2]: result = True elif s1[i] != s1[i2] and s2[j] != s2[j2]: result = True else: result = False break if result is False: break return result print(detect_pattern(x, y))
Отредактировано 3zeros (Сен. 19, 2021 23:04:42)
Офлайн
3zerosДля начала напиши юнит-тесты. Затем под юнит-тесты пиши функцию. Изучи, что такое TDD (Test Driven Development).
Если вы подскажите, как его можно упростить и оптимизировать, буду очень благодарен!
3zerosТут видно, что оно ходит у тебя два раза по одному и тому же. Так что оптимизировать есть что.
как его можно упростить и оптимизировать
Офлайн
from itertools import combinations as cb def detect_pattern(s1, s2): if len(s1) != len(s2): return False for p1,p2 in zip(cb(s1),cb(s2)): if p1!=p2: return False return True # В задании не просили делать обвязку. input и так строку возвращает.
Отредактировано doza_and (Сен. 20, 2021 07:49:33)
Офлайн
doza_andfrom itertools import combinations as cb def detect_pattern(s1, s2): if len(s1) != len(s2): return False for p1,p2 in zip(cb(s1),cb(s2)): if p1!=p2: return False return True
>>> from itertools import combinations as cb >>> >>> def detect_pattern(s1, s2): ... if len(s1) != len(s2): ... return False ... for p1,p2 in zip(cb(s1),cb(s2)): ... if p1!=p2: ... return False ... return True ... >>> detect_pattern('', '') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in detect_pattern TypeError: Required argument 'r' (pos 2) not found >>>
>>> from itertools import combinations as cb >>> >>> def detect_pattern(s1, s2): ... if len(s1) != len(s2): ... return False ... for p1,p2 in zip(cb(s1, 2),cb(s2, 2)): ... if p1!=p2: ... return False ... return True ... >>> detect_pattern('', '') True >>> detect_pattern('x', 'x') True >>> detect_pattern('x', 'a') True >>> detect_pattern('xx', 'ax') False >>> detect_pattern('xx', 'aa') False >>>
Отредактировано py.user.next (Сен. 20, 2021 13:10:28)
Офлайн
def get_all_index(s): d = {} for n,i in enumerate(s): if i not in d: d[i] = [n] else: d[i].append(n) return d def compare(d1,d2): if list(d1.values()) == list(d2.values()): return True else: return False def is_template(temp, string): return compare(get_all_index(temp), get_all_index(string)) test = [('x', 'y'), ('abc', 'xyz'), ('abcabc', 'xyzxyz'), ('abcabc', 'xyzxyk'), ('abcatk', 'xyzxmn'), ('aaa', 'bbbbb'), ('aaa', 'bbb'), ('', '')] for t, s in test: print(f'{t}, {s} ==> {is_template(t, s)}')
x, y ==> True
abc, xyz ==> True
abcabc, xyzxyz ==> True
abcabc, xyzxyk ==> False
abcatk, xyzxmn ==> True
aaa, bbbbb ==> False
aaa, bbb ==> True
, ==> True
Process finished with exit code 0
Офлайн
Ребят, всем привет! Дали задание по информатике, написать код на python.К сожалению знаю только Pascal,помогите пожалуйста
Практическая работа № 6.
Моделирование работы процессора
1. Напишите программу, которая моделирует работу процессора. Процессор имеет 4 реги-стра, они обозначаются R0, R1, R2 и R3. Все команды состоят из трех десятичных цифр: код операции, номер первого регистра и номер второго регистра (или число от 0 до 9). Коды команд и примеры их использования приведены в таблице:
Код операции Описание Пример Псевдокод
1 запись константы 128 R2 := 8
2 копирование значения 203 R3 := R0
3 сложение 331 R1 := R1 + R3
4 вычитание 431 R1 := R1 – R3
Обратите внимание, что результат записывается во второй регистр. Команды вводятся по-следовательно как символьные строки. После ввода каждой строки программа показывает значения всех регистров.
2. *Добавьте в систему команд умножение, деление и логические операции c регистрами – «И», «ИЛИ», «исключающее ИЛИ».
3. *Добавьте в систему команд логическую операцию «НЕ». Подумайте, как можно исполь-зовать второй регистр.
4. *Сделайте так, чтобы в команде с кодом 1 можно было использовать шестнадцатеричные значения констант (0-9, A-F).
5. Добавьте обработку ошибок типа «неверная команда», «неверный номер регистра», «де-ление на ноль».
6. *Добавьте команду «СТОП», которая прекращает работу программы. Введите строковый массив, моделирующий память, и запишите в него программу – последовательность ко-манд. Ваша программа должна последовательно выполнять эти команды, выбирая их из «памяти», пока не встретится команда «СТОП».
7. **Подумайте, как можно было бы организовать условный переход: перейти на N байт вперед (или назад), если результат последней операции – ноль.
Офлайн