Есть ли способ определить, есть ли у слова одинаковые буквы рядом друг с другом? - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь создать в Python функцию, выполняющую определенные функции со списком слов в текстовом документе. Все остальные функции работают, так что это не проблема со словом document. Эта функция, которую я пытаюсь создать, просматривает каждое слово в текстовом документе и сообщает, есть ли в нем две одинаковые буквы рядом друг с другом. В нем всегда говорится, что в документе касаются 0 букв.

Я пробовал это, но просто не могу на всю жизнь понять, почему это не работает, со стороны

if word [a] == word [a + 1:]: переменная a равна 0, когда она должна быть буквой слова

def sameLettersTouchingFn(wordDocument):

    sameLettersTouchingCount = 0

    for word in wordDocument:

        for a in range(len(word)-1): #for every letter in the word

            if word[a] == word[a+1:]: #if letter is same as one next to it

                sameLettersTouchingCount +=1 # count goes plus one

        if sameLettersTouchingCount == 1: # if it has two letters touching

            print(word, "Has two of the same letter touching") #prints it has two letters touching


    print ("There is", sameLettersTouchingCount, "words with letters touching")

Мои ожидаемые результаты - напечатать слова с одинаковыми буквами, которые касаются друг друга, и напечатать, сколько слов касаются одной и той же буквы. Он не говорит, что слова имеют одинаковые соприкасающиеся буквы, и говорит, что 0 слов имеют одинаковые соприкасающиеся буквы

Ответы [ 2 ]

1 голос
/ 25 мая 2019

if word[a] == word[a+1:]:

Должно быть

if word[a] == word[a+1]:

Первым является остаток слова, а не буква

0 голосов
/ 25 мая 2019

Вы можете использовать zip () и any () , чтобы проверить наличие дубликатов:

sentences = ["this has not",
             "seems we got at least one", 
             "peers will see good things"]


for s in sentences: 
    cnt = 0
    for word in s.split():
        if any(a==b for a,b in zip(word,word[1:])):
            print (f"- '{word}' has same letter twice")
            cnt += 1
    if cnt:
        print(f"{cnt} word(s) with duplicate letters in '{s}'\n") 
    else: 
        print(f"No dupes in '{s}'\n")

Вывод:

No dupes in 'this has not'

- 'seems' has same letter twice
1 word(s) with duplicate letters in 'seems we got at least one'

- 'peers' has same letter twice
- 'will' has same letter twice
- 'see' has same letter twice
- 'good' has same letter twice
4 word(s) with duplicate letters in 'peers will see good things'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...