Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2021 23:26:42

3zeros
Зарегистрирован: 2021-09-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

Прохожу курс по 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

Я надеюсь смог объяснить, потому что сам тяжело понимал задание, мозг взрывается, не знаю, с чего начать, какой алгоритм. Заранее спасибо!

Офлайн

#2 Сен. 18, 2021 01:11:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

3zeros
Я надеюсь смог объяснить, потому что сам тяжело понимал задание
Выясни точно задание. Что за шаблон?



Офлайн

#3 Сен. 18, 2021 23:09:49

3zeros
Зарегистрирован: 2021-09-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

py.user.next
Задачка на английском, вот перевод от Яндекса:

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

Ниже приведены несколько примеров одинаковых и различных шаблонов: (фото)

Примечание:
Функция detect_pattern принимает два параметра: две строки для сравнения.
Вам разрешено создавать новые строки, но в противном случае вам не разрешается создавать дополнительные структуры данных для решения этой проблемы (без списка, набора, словаря и т. Д.).
Имейте в виду, что метод должен возвращать одно и то же значение независимо от того, в каком порядке передаются две строки.

Прикреплённый файлы:
attachment 2.jpg (62,0 KБ)

Офлайн

#4 Сен. 19, 2021 01:22:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

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)

Офлайн

#5 Сен. 19, 2021 16:39:03

3zeros
Зарегистрирован: 2021-09-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

py.user.next
Нужно первую строку проверить на совпадения символов попарно. Первый и второй, первый и третий, первый и четвёртый и так далее. И в это же время нужно проверять символы второй строки по тем же позициям. Например, если в первой строке первый и третий символ не равны, то во второй строке первый и третий символ должны быть не равны. Если в первой строке первый и пятый символ равны, то во второй строке первый и пятый символ должны быть равны. Проверяются так все возможные пары. То есть второй и третий, второй и четвёртый, второй и пятый и так далее тоже проверяются.

Большое спасибо! Я в python полный новичок, недавно только начала его изучать, но понял алгоритм, который вы объяснили. Написал такой вот код:

 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)

Офлайн

#6 Сен. 20, 2021 01:12:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

3zeros
Если вы подскажите, как его можно упростить и оптимизировать, буду очень благодарен!
Для начала напиши юнит-тесты. Затем под юнит-тесты пиши функцию. Изучи, что такое TDD (Test Driven Development).

3zeros
как его можно упростить и оптимизировать
Тут видно, что оно ходит у тебя два раза по одному и тому же. Так что оптимизировать есть что.



Офлайн

#7 Сен. 20, 2021 07:46:22

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

  
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)

Офлайн

#8 Сен. 20, 2021 13:06:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

doza_and
 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
  
>>> 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
>>> 
Да? Хм, а это ведь неправильно.

Я ещё заменил combinations на permutations на всякий случай - тоже facepalm в итоге. (Без двоек имеется в виду.)

Короче, надо меньше пить, пить надо меньше



Отредактировано py.user.next (Сен. 20, 2021 13:10:28)

Офлайн

#9 Сен. 20, 2021 22:44:57

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

 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

Офлайн

#10 Сен. 21, 2021 17:51:54

MARATUNG
Зарегистрирован: 2021-09-21
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, написать код

Ребят, всем привет! Дали задание по информатике, написать код на 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 байт вперед (или назад), если результат последней операции – ноль.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version