In: Computer Science
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!
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! :)