Проблема с вашим кодом в том, что у вас есть два для циклов и только один оператор break.
Если значение count >= countLetter/2
равно true, печатается i.upper(),":",bookList[i].upper()
и вызывается оператор break. Оператор break выходит за пределы for letterBook in i
l oop, но не выходит за пределы for letterText in Text
l oop, и поэтому этот l oop переходит на следующую итерацию и т. Д.
Я часто использую переменные-флаги для выхода из таких циклов. Переменная flag, такая как логическая переменная, может изначально иметь значение false, но будет хранить true, если count >= countLetter/2
имеет значение true, и если переменная flag имеет значение true, в for letterText in Text
l oop выполняется
. Проверьте код ниже:
import csv
Text = input("Book...")
data = open(r"C:\Users\file.csv")
dataReader = csv.reader(data, delimiter = ";")
count = 0
countLetter = 0
bookList= dict()
letterList= list()
for letterText in Text:
letterList.append(letterText)
countLetter = countLetter + 1
for row in dataReader:
bookList[row[0]]= row[1]
for (i) in bookList:
for letterBook in i:
LetterBookList = list(letterBook)
count = 0
#exact book name typed
halfThresholdReached = False
if Text == i:
print(i.upper(),":",bookList[i].upper())
continue
for letterText in Text:
for letterBook in i:
if letterText == letterBook:
count = count + 1
if count >= countLetter/2:
print(i.upper(),":",bookList[i].upper())
halfThresholdReached = True
break
if halfThresholdReached:
break
РЕДАКТИРОВАТЬ: Есть еще одна часть, которую я забыл посмотреть. Вы также проверяете, есть ли if Text == i
в for (i) in bookList
l oop, и если это так, то вы должны перейти к следующей итерации того же l oop и не проверять оставшуюся часть Text . Поэтому, если он возвращает true, добавьте оператор continue
, чтобы перейти к следующей итерации.