Task 1

Searching with built in functions

15.1: searching.py

  find = "learning"
print("Enter the word to find: " + find)

words = ["We", "love", "learning", "to", "program"]

if find.lower() in map(str.lower, words):
    print("Word found at index:", words.index(find))
else:
    print("Word not found!")

  

Output

  >>> Enter the word to find: learning
>>> Word found at index: 2
  

Task 2

Serial Search

15.2: serial.py

  letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
           "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

find = "n"
print("Enter a letter to find: " + find)

if len(find) != 1:
    print("Please enter a single letter.")
    exit()

for x in letters:
    if x == find:
        index = letters.index(x)
        print("Letter found at index:", index)
        del letters[index]

        if x not in letters:
            print("Letter not found again")
            break

  

Output

  >>> Enter a letter to find: n
>>> Letter found at index: 13
>>> Letter not found again
  

Task 3

Serial Search

15.3: binary.py

  from words import getwords

words = getwords()

mindex = 0
maxdex = len(words) - 1

word: str = None

find = "p"
print("Enter a letter to find: " + find)

while word == None:
    index = int((mindex + maxdex) / 2)

    if words[index] == find:
        word = words[index]
        print("Letter found at index:", index)
        break

    if find in words[index:]:
        mindex = index
        continue

    if find in words[:index]:
        maxdex = index
        continue

    print("Letter not found")
    break

  

Output

  >>> Enter a letter to find: p
>>> Letter not found
  

Also, because I felt like it, I wrote a binary search program that downloads the entire english dictionary and looks for a single word.

BTW, it is insanely fast, given it looks through nearly 171,476 words.

It finishes executing in just 1257649 ticks or 125.7649 milliseconds.

15.3: binary

  from random import randint
from words import getwords

words = getwords()

mindex = 0
maxdex = len(words) - 1

word: str = None

find = words[randint(0, len(words) - 1)]
print('Finding', find)

while word == None:
    index = int((mindex + maxdex) / 2)

    if words[index] == find:
        word = words[index]
        print("Letter found at index:", index)
        break

    if find in words[index:]:
        mindex = index
        continue

    if find in words[:index]:
        maxdex = index
        continue

    print("Letter not found")
    break

  

Output

  >>> Finding Saberhagen
>>> Letter found at index: 346157