Question

In: Computer Science

We were asked this: Write a function that takes a list, and returns a list representing...

We were asked this:

Write a function that takes a list, and returns a list representing each word whose reverse is also in the list.

    def find_reversals(lst: List[str]) -> List[str]:

Each pair, such as 'abut', 'tuba', should be represented by the first element encountered. Don't report the same pairs twice.

Don't list palindromes.

I wrote this, which might not be optimal but passes the unit test!

def find_reversals(lst):
#Place to save to
found_reversals=[]
  
#Make each string lowercase
for i in range(len(lst)):
lst[i]=lst[i].lower()
  
#Check the lowercase list
for i in range(len(lst)):
for j in range(i+1,len(lst)):
#Reverse the string using indexing feature ::-1
reversed_string=lst[j][::-1]
#If the original word on the list == the reversed STRING and is not a palindrome
if(lst[i]==reversed_string and lst[i]!=lst[j]):
#If the string is not a duplicate item
if lst[i] not in found_reversals:
#See if a pair exists, then doesn't append in the list
if lst[i][::-1] not in found_reversals:
found_reversals.append(lst[i])
return found_reversals

The next problem wants us to recycle this...

Write a program that finds the reversals in Downey's word list.

List each pair only once, and only report the first word: List 'abut', but not 'tuba'

Do not list palindromes.

    def find_reversals_in_file(fileName: str) -> List[str]:

If you try to open a file that does not exist, you should catch a FileNotFoundError and print an error message in your own words¶

I have this written:

def find_reversals_in_file(filename):
try:
with open(filename) as f:
  
#Use splitlines to remove the \n from the end of lines
f = f.read().splitlines()
  
#Place to save all words from file to
file_words = []
  
#Split the lines of words into multiple words using ' ' as a delimiter
for x in f:
y = x.split()
for temp in y:
#Don't save any spaces
if len(temp.strip()) == 0:
continue
file_words.append(temp)
#If you can't open the file, return an error message.
except:
print("File does not exist.")
return [];
  
lst = find_reversals_in_file("words.txt")
result = find_reversals(lst)
print(f"There were {len(lst)} reversals")

for word in result:
print(word)

What am I missing here? Thank you in advance!

Solutions

Expert Solution

Hi! :)

Here's the working code to solve the assignment:

def find_reversals(lst):
    #Place to save to
    found_reversals=[]
  
    #Make each string lowercase
    for i in range(len(lst)):
        lst[i]=lst[i].lower()
  
    #Check the lowercase list
    for i in range(len(lst)):
        for j in range(i+1,len(lst)):
            #Reverse the string using indexing feature ::-1
            reversed_string=lst[j][::-1]
            #If the original word on the list == the reversed STRING and is not a palindrome
            if(lst[i]==reversed_string and lst[i]!=lst[j]):
                #If the string is not a duplicate item
                if lst[i] not in found_reversals:
                    #See if a pair exists, then doesn't append in the list
                    if lst[i][::-1] not in found_reversals:
                        found_reversals.append(lst[i])
    return found_reversals

'''
The next problem wants us to recycle this...

Write a program that finds the reversals in Downey's word list.

List each pair only once, and only report the first word: List 'abut', but not 'tuba'

Do not list palindromes.

    def find_reversals_in_file(fileName: str) -> List[str]:

If you try to open a file that does not exist, you should catch a FileNotFoundError and print an error message in your own words¶

I have this written:
'''

def find_reversals_in_file(filename):
    try:
        with open(filename) as f:
          
            #Use splitlines to remove the \n from the end of lines
            f = f.read().splitlines()
              
            #Place to save all words from file to
            file_words = []
              
            #Split the lines of words into multiple words using ' ' as a delimiter
            for x in f:
                y = x.split()
                for temp in y:
                    #Don't save any spaces
                    if len(temp.strip()) == 0:
                        continue
                    file_words.append(temp)
            return file_words                                                           # ADDED     - file_words must be returned
    #If you can't open the file, return an error message.
    except:
        print("File does not exist.")
    return [];
  
lst = find_reversals_in_file("words.txt")
result = find_reversals(lst)
# print(f"There were {len(lst)} reversals")                                             # REMOVED   - result is the list of reversals
print(f"There were {len(result)} reversals")                                            # ADDED     - result is the list of reversals

for word in result:
    print(word)

As you can see, I tried adding indentations to the code myself because the community software has mangled up the whitespace in your code. I have added comments with proper reason to the edits.

Here's a demo run:

Hope this helps! :)


Related Solutions

Write a function that takes a list of integers as input and returns a list with...
Write a function that takes a list of integers as input and returns a list with only the even numbers in descending order (Largest to smallest) Example: Input list: [1,6,3,8,2,5] List returned: [8, 6, 2] Do not use any special or built in functions like append, reverse etc.
Write a function called draw_card. It takes no arguments and returns an integer representing the value...
Write a function called draw_card. It takes no arguments and returns an integer representing the value of a blackjack card drawn from a deck. Get a random integer in the range 1 to 13, inclusive. If the integer is a 1, print "Ace is drawn" and return 1. If the integer is between 2 and 10, call it x, print "<x> is drawn" and return x (print the number, not the string literal "<x>"). If the number is 11, 12,...
Write a Python function that takes a list of integers as a parameter and returns the...
Write a Python function that takes a list of integers as a parameter and returns the sum of the elements in the list. Thank you.
Write a Python function that takes a list of integers as a parameter and returns the...
Write a Python function that takes a list of integers as a parameter and returns the sum of the elements in the list. Thank you.
USING PYTHON, write a function that takes a list of integers as input and returns a...
USING PYTHON, write a function that takes a list of integers as input and returns a list with only the even numbers in descending order (Largest to smallest) Example: Input list: [1,6,3,8,2,5] List returned: [8, 6, 2]. DO NOT use any special or built in functions like append, reverse etc.
Use Scheme Language Write a Scheme function that takes a list and returns a list identical...
Use Scheme Language Write a Scheme function that takes a list and returns a list identical to the parameter except the third element has been deleted. For example, (deleteitem '(a b c d e)) returns ‘(a b d e) ; (deleteitem '(a b (c d) e)) returns ‘(a b e).
1.Write a function div7(lst) which takes in a list of integers, and returns a list of...
1.Write a function div7(lst) which takes in a list of integers, and returns a list of booleans of the same length, such that for each integer in the original list, the boolean in the output list is True if that integer was divisible by 7, or False if not. Use list comprehensions in python, the function only could be at most two lines long. Here is some examples: >>> div7([14, 5, 7, 3, 29, 28, 10]) [True, False, True, False,...
Write a LISP function COUNTX which takes an atom and a list and returns the number...
Write a LISP function COUNTX which takes an atom and a list and returns the number of top-level occurrences of the atom in the list. For example: (COUNTX ‘A ‘(A (A B) B A B A (B A)) Returns the value 3, the other two A’s are not at the top level
In DrRacket Write a function, removeAll, which takes two lists, list-a and list-b and returns a...
In DrRacket Write a function, removeAll, which takes two lists, list-a and list-b and returns a list containing only the items in list-a that are not also in list-b. E.g., (remove-all '(a b b c c d) '(a c a)) -> '(b b d)
SML Complete the following programs. 1. Write a function listify that takes a list and returns...
SML Complete the following programs. 1. Write a function listify that takes a list and returns a list of lists where each element of first list becoming its own single-element list (Fill in the code here) fun main() = let val lst = (explode "rad"); in print (PolyML.makestring ( listify lst )) end; 2. Write a function splitlist that takes a list of pairs and returns a pair of lists that has the firsts of the pairs in one list...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT