i have a script in you have to add more funstions in it and make it more advanced and easy for user : import re # Define a dictionary to hold letter values and their categories abjad_values = { 'ا': (1, 'Fire'), 'أ': (1, 'Fire'), 'إ': (1, 'Fire'), 'آ': (1, 'Fire'), 'ٱ': (1, 'Fire'), 'ء': (1, 'Fire'), 'ئ': (1, 'Fire'), 'ب': (2, 'Earth'), 'پ': (2, 'Earth'), 'ج': (3, 'Air'), 'چ': (3, 'Air'), 'د': (4, 'Water'), 'ڈ': (4, 'Water'), 'ه': (5, 'Fire'), 'ہ': (5, 'Fire'), 'ه‍': (5, 'Fire'), 'ھ': (5, 'Fire'), 'ة': (5, 'Fire'), 'و': (6, 'Earth'), 'ؤ': (6, 'Earth'), 'ز': (7, 'Air'), 'ژ': (7, 'Air'), 'ح': (8, 'Water'), 'ط': (9, 'Fire'), 'ى': (10, 'Earth'), 'ي': (10, 'Earth'), 'ی': (10, 'Earth'), 'ے': (10, 'Earth'), 'ک': (20, 'Air'), 'ك': (20, 'Air'), 'گ': (20, 'Air'), 'ل': (30, 'Water'), 'م': (40, 'Fire'), 'ن': (50, 'Earth'), 'ں': (50, 'Earth'), 'س': (60, 'Air'), 'ع': (70, 'Water'), 'ف': (80, 'Fire'), 'ص': (90, 'Earth'), 'ق': (100, 'Air'), 'ر': (200, 'Water'), 'ڑ': (200, 'Water'), 'ش': (300, 'Fire'), 'ت': (400, 'Earth'), 'ٹ': (400, 'Earth'), 'ث': (500, 'Air'), 'خ': (600, 'Water'), 'ذ': (700, 'Fire'), 'ض': (800, 'Earth'), 'ظ': (900, 'Air'), 'غ': (1000, 'Water') } def remove_diacritics_and_spaces(phrase): """Removes Arabic diacritics and spaces from the phrase.""" diacritics_pattern = r'[\u064B-\u0652]' # Arabic diacritics phrase = re.sub(diacritics_pattern, '', phrase) # Remove diacritics phrase = phrase.replace(' ', '') # Remove spaces return phrase def calculate_abjad_value(phrase): """Calculates the Abjad value of a given Arabic phrase and provides a breakdown.""" total_value = 0 category_totals = {'Fire': 0, 'Earth': 0, 'Air': 0, 'Water': 0} breakdown = {} letter_count = {} total_letters_count = 0 # Add a variable to track the total letter count. # Clean the phrase cleaned_phrase = remove_diacritics_and_spaces(phrase) for character in cleaned_phrase: value_info = abjad_values.get(character) # Count letters letter_count[character] = letter_count.get(character, 0) + 1 if value_info: value, category = value_info total_value += value category_totals[category] += value breakdown[character] = value total_letters_count += 1 # Increase total letter count return total_value, category_totals, breakdown, letter_count, cleaned_phrase, total_letters_count def display_missing_letters(cleaned_phrase): """Displays missing letters in red.""" missing_letters = [] for letter in abjad_values.keys(): if letter not in cleaned_phrase: missing_letters.append(letter) if missing_letters: print("\nMissing letters (in red):") print("\033[91m" + " ".join(missing_letters) + "\033[0m") # ANSI code for red text def display_results(phrase, total_value, category_totals, breakdown, letter_count, cleaned_phrase, total_letters_count): """Displays the calculated results in a nice format.""" print(f"\nResults for the phrase: \"{phrase}\" (after cleaning)") print(f"Total Abjad Value: {total_value}") print("Total Letter Count: {}".format(total_letters_count)) # Show total letter count print("Category Breakdown:") for category, total in category_totals.items(): print(f" {category}: {total}") print("\nDetailed Breakdown with Contributions:") # Sort the breakdown dictionary by keys (characters) for character in sorted(breakdown.keys()): value = breakdown[character] count = letter_count[character] contribution = value * count # Contribution = Value * Count print(f" {character} = {value} x {count} = {contribution}") # Display missing letters display_missing_letters(cleaned_phrase) def main(): print("Welcome to the Enhanced Abjad Calculator") while True: phrase = input("\nEnter an Arabic phrase (or 'exit' to quit): ") if phrase.lower() == 'exit': break total_value, category_totals, breakdown, letter_count, cleaned_phrase, total_letters_count = calculate_abjad_value(phrase) display_results(phrase, total_value, category_totals, breakdown, letter_count, cleaned_phrase, total_letters_count) if __name__ == "__main__": main()