This commit is contained in:
2025-08-04 13:04:42 -04:00
parent 13ea5bbf8b
commit af9bb2374f
26 changed files with 613 additions and 968 deletions
@@ -0,0 +1,39 @@
# Write an automated censor program that reads in the text from a file and creates a new file where all of the four letter words have been replaced by "****". You can ignore punctuation and you may assume that no words in the file are split across multiple lines.
import os
def Censor_Words(input_file, output_file):
print(f"Censoring words in file: , {input_file} and writing them to {output_file}\n")
#check if output file exists and if not then create it
if not os.path.exists(output_file):
open(output_file, 'w').close()
else:
print(f"{output_file} already exists. Overwriting it.\n")
try: # try to open the file and write to the output file
with open(input_file, 'r') as f: # open the file, using r to read read it
text = f.read() # read the file
words = text.split() # split up the words
for i in range(len(words)): # loop through the words. Len(words) gives the number of words in the list
if len(words[i]) == 4: # if the word is 4 characters, then replace it with ****
print(f"Word {words[i]} censored.\n") #output the word that was censored for troubleshooting.
words[i] = "****"
with open(output_file, 'w') as f: # open the output file, using w to write to it
f.write(" ".join(words))
print("Censoring document complete. Results found in output.txt\n")
except FileNotFoundError:
print("File wasn't found.")
except:
print("An error occurred.")
def __main__():
script_directory = os.path.dirname(os.path.abspath(__file__)) # get the directory of the script
input_file = os.path.join(script_directory, "input.txt") #had to use os.path.join to get the correct path. Wasn't working with just the file name
output_file = os.path.join(script_directory, "output.txt") # had to use the os.path.join to get the correct path dynamically. Wasn't working with just the file name
print(f"Input file: {input_file}\n, Output file: {output_file}\n") # troubleshooting the file name issues. Show the input and output in console.
Censor_Words(input_file, output_file) # call the function to start censoring
if __name__ == "__main__":
__main__() # call the main function and get things started.
@@ -0,0 +1,123 @@
# Week 8 - Lab: Python Program
# Assignment Value: 10 points
# Description:
# Create a Python program that demonstrates exception handling.
# Your program should include at least three custom-defined exceptions and handle them appropriately.
# Implement try-except blocks to handle exceptions and provide meaningful error messages.
# Test your program with various scenarios to ensure proper exception handling.
# Instructions:
# Create a Python script named exception_handling.py.
# Define three custom exceptions: CustomError1, CustomError2, and CustomError3.
# Implement a function divide_numbers() that takes two numbers as input and returns the result of dividing the first number by the second number.
# Handle the ZeroDivisionError exception. If the second number is zero, raise CustomError1.
# Implement a function open_file() that takes a filename as input and tries to open the file.
# Handle the FileNotFoundError exception. If the file does not exist, raise CustomError2.
# Implement a function process_data() that takes a list as input and tries to access an element at a specific index.
# Handle the IndexError exception. If the index is out of range, raise CustomError3.
# In the main part of your script, demonstrate the usage of all the implemented functions by invoking them and handling exceptions appropriately.
# Take a screenshot of Thonny showing both the code and output at the end of the exercise.
# Upload the screenshot.
# Directions for submitting your written assignment as an attachment:
# When you have completed the assignment, save the file on your computer with your name as part of the file name, for example, a_student_assignment1.docx [using your first initial and last name]
# Click on the title of the assignment above.
# Click on "Upload Files".
# Click on the "Browse Local Files" button to attach your file to this assignment.
# Once you have attached your file, click on the "Submit" button to send your file to your instructor.
# Note: This assignment is due 11:59 PM ET, Sunday of Week 8.
import os
def divide_numbers(num1, num2):
try:
print(f"Dividing numbers {num1} / {num2}")
if num2 == 0:
raise CustomError1
return num1 / num2
except CustomError1:
print("CustomError1: Cannot divide by zero.")
def open_file(input_file):
try:
print(f"Trying to open the {input_file}")
with open(input_file, 'r') as f:
print(f"{input_file} has been opened successfully.")
pass
except FileNotFoundError:
raise CustomError2
def process_data(data, index):
try:
print(f"Trying to return the data for each index.")
return data[index]
except IndexError:
raise CustomError3
class CustomError1(Exception):
pass
class CustomError2(Exception):
pass
class CustomError3(Exception):
pass
def __main__():
script_directory = os.path.dirname(os.path.abspath(__file__)) # get the directory of the script
input_file = os.path.join(script_directory, "input.txt") #had to use os.path.join to get the correct path. Wasn't working with just the file name
fail_input_file = os.path.join(script_directory, "doesnotexist.txt")
try:
print("\n\n----------Division Function-------------")
print("----------------------------------------")
print(f"Failure case: {divide_numbers(10, 0)}")
print(f"Success case: {divide_numbers(100, 10)}")
except CustomError1:
print("CustomError1 handled.")
print("----------End Division Function---------\n\n")
try:
print("---------Open File Function-------------")
print("----------------------------------------")
print(f"Success Case: Trying to open {input_file}")
open_file(input_file)
print(f"Fail Case: Trying to open {fail_input_file}")
open_file(fail_input_file)
except CustomError2:
print("CustomError2 handled.")
print("---------End Open File Function---------\n\n")
try:
print("-------Process List Input Function------")
print("----------------------------------------")
print(f"Failure case: {process_data([1, 2, 3], 3)}")
print(process_data([1, 2, 3], 2))
except CustomError3:
print("CustomError3 handled.")
try:
print("-------Process List Input Function------")
print("----------------------------------------")
print(f"Success case: {process_data([1, 2, 3], 2)}")
except CustomError3:
print("CustomError3 handled.")
print("----End Process List Input Function-----\n\n")
if __name__ == "__main__":
__main__()
+9
View File
@@ -0,0 +1,9 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor cursus arcu non interdum. Phasellus lacus diam, cursus a quam vel, molestie tincidunt nisl. Suspendisse congue finibus lectus, in imperdiet eros imperdiet sit amet. Curabitur hendrerit a magna ultrices aliquet. Pellentesque tortor felis, varius quis aliquam ultrices, dictum nec lorem. Duis diam mauris, semper et enim vel, lobortis porta tellus. Sed nec venenatis urna, in pharetra justo. Vestibulum ac fringilla mi, eget vulputate nisi. Fusce eget vehicula velit. Nullam vel mauris lectus. Cras eleifend condimentum pulvinar. Nulla congue, elit id iaculis aliquet, quam mauris volutpat magna, ut semper nisi lectus vitae neque. In ornare vehicula metus, ac placerat erat pellentesque at.
Nam vel massa ac leo aliquam ultricies. Maecenas tempor, diam ac cursus venenatis, metus lacus mollis dui, sit amet suscipit felis erat in urna. Suspendisse ante ex, luctus in dui quis, lobortis sodales lectus. Nullam rutrum accumsan libero, in semper nibh consectetur sit amet. Donec accumsan non turpis eu finibus. Mauris gravida metus at ipsum fringilla molestie. In ante tellus, semper porta lorem non, tincidunt tempus quam. Praesent finibus pellentesque enim, sit amet gravida nulla accumsan a.
Vivamus molestie odio justo, at suscipit ex malesuada ut. Phasellus sit amet tortor porta elit bibendum accumsan a sit amet erat. Nulla varius sodales urna, id tempus mi molestie in. Ut turpis est, varius nec tellus nec, vehicula tempus nunc. Nullam erat justo, pellentesque et ullamcorper ut, rhoncus quis nibh. Sed ut ultrices ipsum. Nulla tellus est, scelerisque a sodales ac, molestie in est. Nullam nec placerat est. Duis vel metus ipsum. Pellentesque placerat sit amet sem et imperdiet. Suspendisse vulputate elit sit amet ex lobortis, vitae egestas tortor auctor. Sed accumsan sapien ut sem ultrices efficitur.
Praesent suscipit risus quis ipsum pretium cursus. Morbi velit nibh, facilisis tincidunt nisl a, aliquet vulputate est. Vestibulum id commodo felis. Curabitur sit amet interdum ante. Maecenas metus sem, imperdiet vel ligula vehicula, mollis egestas velit. Fusce luctus nibh mollis, suscipit mi et, hendrerit ipsum. Etiam ut blandit felis, ac eleifend turpis. Sed nibh ipsum, convallis sit amet elementum eget, laoreet fringilla ex. Curabitur semper nec metus eget venenatis. Praesent efficitur vitae nulla quis placerat. Nullam porta nulla in dignissim tempus. Aliquam erat volutpat.
In a massa dignissim, luctus dolor at, commodo ligula. Proin odio nisl, auctor ut tempus non, ultrices non purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam eleifend diam nec sem pretium, molestie facilisis urna pellentesque. Vestibulum feugiat metus quis lorem aliquam, ac varius lorem tincidunt. In consectetur tempus massa facilisis placerat. Cras tincidunt justo nulla, ut tristique urna dignissim nec. Maecenas orci nunc, faucibus sed sem vel, vestibulum cursus urna. In hac habitasse platea dictumst. Ut facilisis scelerisque nunc ut feugiat. Donec viverra orci in nisi finibus congue. Etiam consectetur vel neque eu posuere. Aliquam erat volutpat.
+1
View File
@@ -0,0 +1 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor cursus **** non interdum. Phasellus lacus diam, cursus a **** **** molestie tincidunt nisl. Suspendisse congue finibus lectus, in imperdiet **** imperdiet sit amet. Curabitur hendrerit a magna ultrices aliquet. Pellentesque tortor felis, varius **** aliquam ultrices, dictum nec lorem. **** **** mauris, semper et **** **** lobortis porta tellus. Sed nec venenatis urna, in pharetra justo. Vestibulum ac fringilla mi, **** vulputate nisi. Fusce **** vehicula velit. Nullam vel mauris lectus. **** eleifend condimentum pulvinar. Nulla congue, **** id iaculis aliquet, **** mauris volutpat magna, ut semper **** lectus vitae neque. In ornare vehicula metus, ac placerat **** pellentesque at. Nam vel massa ac leo aliquam ultricies. Maecenas tempor, **** ac cursus venenatis, metus lacus mollis **** sit **** suscipit felis **** in urna. Suspendisse **** ex, luctus in dui quis, lobortis sodales lectus. Nullam rutrum accumsan libero, in semper **** consectetur sit amet. Donec accumsan non turpis eu finibus. Mauris gravida metus at ipsum fringilla molestie. In **** tellus, semper porta lorem **** tincidunt tempus quam. Praesent finibus pellentesque enim, sit **** gravida nulla accumsan a. Vivamus molestie **** justo, at suscipit ex malesuada ut. Phasellus sit **** tortor porta **** bibendum accumsan a sit **** erat. Nulla varius sodales urna, id tempus mi molestie in. Ut turpis **** varius nec tellus **** vehicula tempus nunc. Nullam **** justo, pellentesque et ullamcorper ut, rhoncus **** nibh. Sed ut ultrices ipsum. Nulla tellus **** scelerisque a sodales ac, molestie in **** Nullam nec placerat **** **** vel metus ipsum. Pellentesque placerat sit **** sem et imperdiet. Suspendisse vulputate **** sit **** ex lobortis, vitae egestas tortor auctor. Sed accumsan sapien ut sem ultrices efficitur. Praesent suscipit risus **** ipsum pretium cursus. Morbi velit nibh, facilisis tincidunt **** a, aliquet vulputate **** Vestibulum id commodo felis. Curabitur sit **** interdum ante. Maecenas metus **** imperdiet vel ligula vehicula, mollis egestas velit. Fusce luctus **** mollis, suscipit mi et, hendrerit ipsum. Etiam ut blandit felis, ac eleifend turpis. Sed **** ipsum, convallis sit **** elementum eget, laoreet fringilla ex. Curabitur semper nec metus **** venenatis. Praesent efficitur vitae nulla **** placerat. Nullam porta nulla in dignissim tempus. Aliquam **** volutpat. In a massa dignissim, luctus dolor at, commodo ligula. Proin **** nisl, auctor ut tempus **** ultrices non purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam eleifend **** nec sem pretium, molestie facilisis **** pellentesque. Vestibulum feugiat metus **** lorem aliquam, ac varius lorem tincidunt. In consectetur tempus massa facilisis placerat. **** tincidunt justo nulla, ut tristique **** dignissim **** Maecenas **** nunc, faucibus sed sem **** vestibulum cursus urna. In hac habitasse platea dictumst. Ut facilisis scelerisque **** ut feugiat. Donec viverra **** in **** finibus congue. Etiam consectetur vel neque eu posuere. Aliquam **** volutpat.