Top.Mail.Ru
Ответы

Помогите решить задачу в Phyton

Задача 8. Бегущая строка

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

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

Опционально: если получить можно, то выведите значение этого сдвига.

Пример 1:

Первая строка: abcd

Вторая строка: cdab

Первая строка получается из второй со сдвигом 2.

Пример 2:

Первая строка: abcd

Вторая строка: cdba

Первую строку нельзя получить из второй с помощью циклического сдвига.

По дате
По рейтингу
Аватар пользователя
Мыслитель
Аватар пользователя
Знаток

Самый простой код

Аватар пользователя
Ученик

Решение с дополнительным условием

123456789101112131415
 str1 = input('Первая строка: ') 
str2 = input('Вторая строка: ') 
 
if str1 != str2: 
    for i in range(len(str1)): 
        new_str = ''.join([str1[-1 - i:], str1[:-1 - i]]) 
        if new_str == str2: 
            print('Первая строка получается из второй со сдвигом {}'.format(i + 1)) 
            print('Значение сдвига: {}'.format(str1[-1 - i:])) 
            break 
    else: 
        print('Первую строку нельзя получить из второй с помощью циклического сдвига.') 
else: 
    print('Сдвиг не требуется, строки равны !') 
 
Аватар пользователя
Знаток

вот так решил

Аватар пользователя
Ученик

я решил эту задачу таким образом:
first_s = input('Введите первую стоку: ')
second_s = input('Введите вторую строку: ')

if first_s == second_s:
print('Строки идентичны')
else:
k = second_s.index(second_s[0]) + first_s.index(second_s[0])
for position in range(len(second_s)):
if second_s[position] != first_s[(position + k) % len(second_s)]:
print('Первую строчку нельзя получить из второй методом циклического сдвига')
break
else:
print('Первую строчку можно получить из второй со сдвигом в ', k)