-1

I've been given a dictionary with the following words:

dictionary = ['all', 'an', 'and', 'as', 'closely', 'correct', 'equivocal',
              'examine', 'indication', 'is', 'means', 'minutely', 'or', 'scrutinize',
              'sign', 'the', 'to', 'uncertain']

I'm trying to write a spellchecker that tells which words in an input sentence are spelled incorrectly.

The expected output is either:

A) print incorrectly spelled words each at a new line

or

B) only if all words are spelled correctly, print OK

Here's the code I've come up with so far:

dictionary = ['all', 'an', 'and', 'as', 'closely', 'correct', 'equivocal',
              'examine', 'indication', 'is', 'means', 'minutely', 'or',
              'scrutinize', 'sign', 'the', 'to', 'uncertain']  

text = input().split()
counter = 0

for x in text:
    if x not in dictionary:
        counter += 1
        print(x, end='\n')
    elif not counter:
        print("OK")

Two sample inputs and outputs were given as examples to the expected results:

Sample Input 1:

srutinize is to examene closely and minutely

Sample Output 1:

srutinize

examene

Sample Input 2:

all correct

Sample Output 2:

OK

Code works fine for input 1, but input 2 instead of printing OK is printing all correct instead of OK.

Selcuk
  • 57,004
  • 12
  • 102
  • 110
kinets
  • 65
  • 1
  • 8

1 Answers1

1

You are almost there with your updated code. You should just check the counter once after the loop has finished, instead of doing it for every word:

for x in text:
    if x not in dictionary:
        counter += 1
        print(x, end='\n')

if counter == 0:
    print("OK")

There is also a fancier way of solving the problem using a list comprehension:

text = input().split()

typos = [word for word in text if word not in dictionary]
if typos:
    print("\n".join(typos))
else:
    print("OK")
Selcuk
  • 57,004
  • 12
  • 102
  • 110