2016-02-25 2 views
1

У меня возникли проблемы с кодом завершения python.Поиск количества совпадающих букв в двух разных строках с одинаковыми индексами

перекрытия («», «привет») → 0.

мне удалось получить номер назад, когда длина строки совпадают, но если одна из строк имеет меньшую длину, чем другой. Я продолжаю индексировать пределы. Может кто-то помочь мне закончить это.

def overlap(string1,string2): 
    count = 0 
    for i in range(len(string1)): 
     for j in range(len(string2)): 
      if string1[i] == string2[j]: 
       count = count + 1 
       i+=1 
      else: 
       i+=1 
     return count 

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

+0

Для какого входа вы получаете эту ошибку? – JRodDynamite

+0

Это происходит, когда меньшая строка - строка 1, а большая - строка 2, например: строка 1: лето, строка2: сумма, отлично работает, но строка1: сумма и строка2: лето дает ошибку индекса, мой учитель использует тестер файл, поэтому мы не можем изменить ввод – TerasVallo

ответ

5

Создать одинfor цикл, который перебирает min(len(string1), len(string2)) и вы бы избежать проблемы, когда одна строка меньше другой, см образец ниже:

def overlap(string1,string2): 
    count = 0 
    for i in range(min(len(string1), len(string2))): 
     if string1[i] == string2[i]: 
      count = count + 1 
    return count 

print overlap('summer','winter') #2 
print overlap('abcb','dbeb') #2 
print overlap('summer','sum') #3 
print overlap('','winter') #0 

Good Luck!

+0

Большое вам спасибо! – TerasVallo

+1

@AmmarA Добро пожаловать, у вас хороший день! –

2

Замените вложенные петли и повторите только для меньшей длины.

def overlap(string1, string2): 
    count=0; 
    len1= len(string1) 
    len2= len(string2) 
    smallLen= len1 
    if len2<len1: 
     smallLen= len2 

    for i in range(smallLen): 
     if string1[i]== string2[i]: 
      count+= 1 
    return count 
+0

Большое вам спасибо! – TerasVallo

+1

Добро пожаловать. Рад мог помочь. :) – Himanshu

1

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

maxloop = len(str1) if len(str1) <= len(str2) else len(str2) 

Вы сделать условие <=, потому что это не имеет значение, которое выбрано, если они равны, так что просто выбрать первый.

Теперь, когда у вас есть количество итераций вы будете делать, вы можете настроить цикл и счетчик:

count = 0 
for i in range(maxloop): 
    if str1[i] == str2[i]: 
     count += 1 

Единый if оператор проверяет символ в позиции i в обеих строках и увидеть, если они равны, и если они есть, то он добавит один к счетчику перекрытия. Затем просто верните счет после окончания цикла.

1

Попробуйте это:

count = 0 
if len(string1) < len(string2): 
    for i in range(len(string1)): 
     if string1[i] == string2[i]: 
      count += 1 
else: 
    for i in range(len(string2)): 
     if string1[i] == string2[i]: 
      count += 1 
return count 
Смежные вопросы