Почему «для буквы в строке» работает, а если «word = line.strip ()», «для буквы в слове» не работает. ** Поиск строки ** в файле ** - PullRequest
0 голосов
/ 20 июня 2020

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

Ссылка на файл: http://www.gutenberg.org/files/3201/files/

fln=open('CROSSWD.TXT')

def uses_only(allow,word1,count,count_2):
    y=0 #I've tried assigning line before loop as line=fln.readlines() does'nt work
    for line in fln:
        word=line.strip() # somehow the line is stripped of white spaces here or there
        for letter in line: # Does'nt work for in word
            x=count
            z=count_2
            if letter in allow:
                count+=1
            elif letter not in allow: # break loop for unwanted letters
                count=0
                count_2+=1
                break
            
        if x==len(word) and len(allow)==len(word): # runs if the letters match
            y+=x/len(word)
            word1+=word+','
    return True,word1,int(y) #returns matching words & word count

def run():
    allow=input('Enter the only letters the word must contain : ') # input from user         
    word1=''
    count=0
    count_2=0
    print(uses_only(allow,word1,count,count_2))          
run()

Основная проблема, с которой я столкнулся, находится в

    for letter in line:

Если я использую

    for letter in word: **# What's making the loop to break?**

, он вернет пустую строку, хотя они должны делать то же самое, немного сжато в

    word=line.strip()

Также любезно помогите мне сделать совпадение более точным

Ввод: есть

текущий выход:

(True, 'ate,eat,eta,tae,tat,tea,tee,', 7)

Результат дает слова с совпадающей строкой, взятые в качестве входных данных для той же длины и количества совпадающих слов.

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Отлаживая код Я понял, что ошибка в том, что при использовании 'word' переменные x и z не обновляются в последнем l oop, просто поместите их в конец for l oop:

for letter in word:  # Now work for in word
    if letter in allow:
        count+=1
    elif letter not in allow: # break loop for unwanted letters
        count=0
        count_2+=1
        break
    x=count
    z=count_2
0 голосов
/ 21 июня 2020

Чтобы решить эту проблему, я взял for letter in word в отдельную функцию . Это решает как проблему итерации, так и точность совпадения строк.

fln=open('CROSSWD.TXT')
def test_word(word,allow): # Test for a sinlgle word in a line
    for letter in word:
        if letter not in allow:
            return False
    return True
def use_only():
    count=0
    allow=input('Enter the letters: ')
    word1=''
    for line in fln: # iteration for no. of loops
        word=line.strip()
        if test_word(word,allow)==True: #verify the match
            word1+=word+','
            count+=1
    return word1, count
use_only()

In: letter

Out: ('eel,el,ell,er,ere,err,et,lee,leer,leet,let,letter,letterer,re,ree,reel,reeler,relet,reletter,ret,rete,retell,tee,teeter,tele,tell,teller,terete,terret,tetter,tree,tret,', 32)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...