Как мне поступить, сравнивая, является ли один строковый ввод префиксом второго строкового ввода? - PullRequest
1 голос
/ 10 ноября 2019

Скажем, например, что пользователь вводит слово «поворот» как строку 1, а для строки 2 - «оборот». Как бы я создал код, в котором он будет сравнивать каждый символ строк и их индексов. Пока что у меня есть что-то подобное в процессе

string_1 = str(input("Insert first string:"))
string_2 = str(input("Insert second string:"))

def prefixes(a,b):
  if len(b) < len(a):
    return False
  else:
    for i in range(len(b)):

prefixes(string_1,string_2)

Ответы [ 2 ]

2 голосов
/ 10 ноября 2019

Если вы хотите извлечь общий префикс из двух строк ввода , вы можете использовать zip() в сочетании с itertools.takewhile()

from itertools import takewhile


def prefixes(a, b):
    return ''.join(x for x, _ in takewhile(lambda x: x[0] == x[1], zip(a, b)))


string_1 = str(input("Insert first string:"))
string_2 = str(input("Insert second string:"))

print(prefixes(string_1, string_2))

Пример вывода:

Insert first string: prepare
Insert second string: preparation
prepar
1 голос
/ 10 ноября 2019

Вы можете использовать startswith():

string_1 = str(input("Insert first string:"))
string_2 = str(input("Insert second string:"))

if string_2.startswith(string_1):
    # Your code here

Обратите внимание, что startswith() может также принимать параметры для индексов, при которых можно начинать и останавливать сравнение, если вам нужна эта функциональность.


Как прокомментировал вопрос Марк Майер , более подробная информация доступна по строковым методам здесь .


Редактировать : Вы попросили способ сделать это, используя цикл for. Предполагается, что вы хотите проверить, начинается ли string_2 с string_1.

string_1 = str(input("Insert first string:"))
string_2 = str(input("Insert second string:"))

def prefix_check(short, long);
    for index in range(min(len(short), len(long))):
        if short[index] != long[index]:
            return false
    return true

print(prefix_check(string_1, string_2))
...