angle module

AIU - holds all angle processes
 avatar
unknown
python
24 days ago
11 kB
6
Indexable
import math

import main_messages

from rich.console import Console
from rich.table import Table

console = Console()

# ----------------------------------------------------------------------------------------------------------------------------------#
def degrees_to_radians(deg_rad):
    return deg_rad * (math.pi / 180)

def radians_to_degrees(rad_deg):
    return rad_deg * (180 / math.pi)

def gradians_to_degrees(grad_deg):
    return grad_deg * (9 / 10)

def dms_to_degrees(mins, secs):
    return (mins / 60) + (secs / 3600)

# ----------------------------------------------------------------------------------------------------------------------------------#
def angle_conversion_menu():
    main_messages.separator()
    table = Table(title="", show_lines=True)
    table.add_column("🔶  Angle Conversion", justify="left", style="cyan", no_wrap=True)
    
    table.add_row("[1] Degrees ➡️  Radians")
    table.add_row("[2] Radians ➡️  Degrees")
    table.add_row("[3] Gradians ➡️  Degrees")
    table.add_row("[4] Minutes/Seconds ➡️  Degrees")
    table.add_row("[red][5] 🚪 Return to Main Menu[/red]")

    console.print(table)

# ----------------------------------------------------------------------------------------------------------------------------------#
def angle_conversion_confirm():

    table = Table(title="", show_lines=True)
    table.add_column("ℹ️ Would you like to make another computation?", justify="left", style="cyan", no_wrap=True)
    
    table.add_row("[1] ✅ [green]Yes[/green]")
    table.add_row("[2] 🚪 [red]Return to Menu[/red]")

    console.print(table)

# ----------------------------------------------------------------------------------------------------------------------------------#
def angle_5_select():
    try:
        console.print("[green]\n➡️ Enter your selection[/green] [[blue]1[/blue] - [blue]5[/blue]]:")
        angle_select = int(input("-- "))  
    except ValueError:
        console.print("[red]\n❌ Invalid Entry[/red]. Enter a number between 1 and 5!")
        return  

    if angle_select < 1 or angle_select > 5:
        console.print("[red]\n❌ Out of Range[/red]. Enter a number between 1 and 5!")
        return  

    if angle_select == 5:
        console.print("\n[yellow]🚪 Returning to Main Menu...[/yellow]")
        main_messages.separator()
        return "BACK_MAIN"

# ----------------------------------------------------------------------------------------------------------------------------------#
    if angle_select == 1:
        while True:
            try:
                main_messages.separator()
                deg_rad = float(console.input("[green]➡️ Enter your degrees[/green]\n-- "))
                
                if deg_rad == 0:
                    console.print("\n❌ 0 degrees is still 0 in radians!")
                    continue

                 # Checks for "s" if amount is greater than 1
                main_messages.separator()
                if deg_rad > 1 or deg_rad < 1:
                    console.print(f"\n✅ {deg_rad} degrees is {degrees_to_radians(deg_rad):.4f} in radians")
                elif deg_rad == 1:
                    console.print(f"\n✅ {deg_rad} degree is {degrees_to_radians(deg_rad):.4f} in radians")
                main_messages.separator()



            except ValueError:
                console.print("\n[red]\n❌ Invalid Entry[/red]. Enter a valid number.\n")
                continue

            while True:  
                angle_conversion_confirm()
                main_messages.separator()

                try:
                    return_menu = int(input("\n-- "))

                    if return_menu < 1 or return_menu > 2:
                        console.print("\n[red]❌ Out of Range[/red]. Please enter [1 or 2].")
                        main_messages.separator()
                    elif return_menu == 1:
                        break  
                    elif return_menu == 2:
                        console.print("\n[yellow]🚪 Returning to Angle Menu... [/yellow]")
                        return  
                except ValueError:
                    console.print("\n[red]❌ Invalid Entry[/red]. Enter a valid number.")
                    main_messages.separator()     

# ----------------------------------------------------------------------------------------------------------------------------------#           
    elif angle_select == 2:
        while True:
            try:
                main_messages.separator()
                rad_deg = float(console.input("[green]➡️ Enter your radians[/green]\n-- "))

                if rad_deg == 0:
                    console.print("\n❌ 0 radians is still 0 in degrees!")
                    continue
                        
                # Checks for "s" if amount is greater than 1
                main_messages.separator()
                if rad_deg > 1 or rad_deg < 1:
                    console.print(f"\n✅ A radians of {rad_deg} is {radians_to_degrees(rad_deg):.4f} in degrees")
                elif rad_deg == 1:
                    console.print(f"\n✅ A radian of {rad_deg} is {radians_to_degrees(rad_deg):.4f} in degrees")
                    main_messages.separator()


            except ValueError:
                console.print("\n[red]\n❌ Invalid Entry[/red]. Enter a valid number.\n")
                continue

            while True:  
                angle_conversion_confirm()
                main_messages.separator()

                try:
                    return_menu = int(input("\n-- "))

                    if return_menu < 1 or return_menu > 2:
                        console.print("\n[red]❌ Out of Range[/red]. Please enter [1 or 2].")
                        main_messages.separator()
                    elif return_menu == 1:
                        break  
                    elif return_menu == 2:
                        console.print("\n[yellow]🚪 Returning to Angle Menu... [/yellow]")
                        return  
                except ValueError:
                    console.print("\n[red]❌ Invalid Entry[/red]. Enter a valid number.")
                    main_messages.separator()  

# ----------------------------------------------------------------------------------------------------------------------------------#                   
    elif angle_select == 3:
        while True:
            try:
                main_messages.separator()
                grad_deg = float(console.input("[green]➡️ Enter your gradian[/green]\n-- "))

                if grad_deg == 0:
                    console.print("\n❌ 0 gradian is still 0 in degrees!")
                    continue
                    
                # Checks for "s" if amount is greater than 1
                main_messages.separator()
                if grad_deg > 1 or grad_deg < 1:
                    console.print(f"\n✅ {grad_deg} Gradians is {gradians_to_degrees(grad_deg):.4f} in degrees")
                elif grad_deg == 1:
                    console.print(f"\n✅ {grad_deg} Gradian is {gradians_to_degrees(grad_deg):.4f} in degrees")
                    main_messages.separator()


            except ValueError:
                console.print("\n[red]\n❌ Invalid Entry[/red]. Enter a valid number.\n")
                continue

            while True:  
                angle_conversion_confirm()
                main_messages.separator()

                try:
                    return_menu = int(input("\n-- "))

                    if return_menu < 1 or return_menu > 2:
                        console.print("\n[red]❌ Out of Range[/red]. Please enter [1 or 2].")
                        main_messages.separator()
                    elif return_menu == 1:
                        break  
                    elif return_menu == 2:
                        console.print("\n[yellow]🚪 Returning to Angle Menu... [/yellow]")
                        return  
                except ValueError:
                    console.print("\n[red]❌ Invalid Entry[/red]. Enter a valid number.")
                    main_messages.separator()

# ----------------------------------------------------------------------------------------------------------------------------------#                   
    elif angle_select == 4:
        while True:
            try:
                main_messages.separator()
                mins = float(console.input("[green]➡️ Enter your minutes[/green]\n-- "))
                secs = float(console.input("[green]➡️ Enter your seconds[/green]\n-- "))

            
                if mins == 0 and secs == 0:
                    console.print("\n❌ Both minutes and seconds cannot be zero! Enter a valid value!")
                    continue
                if mins < 0 and secs < 0:
                    console.print("\n❌ Both minutes and seconds cannot be negative! Enter a valid value!")
                    continue
                if mins < 0 and secs >= 0:
                    console.print("\n❌ Minutes cannot be negative! Enter a valid value!")
                    continue
                if mins >= 0 and secs < 0:
                    console.print("\n❌ Seconds cannot be negative! Enter a valid value!")
                    continue
                main_messages.separator()
 
                min_label = "minute" if mins == 1 else "minutes"
                sec_label = "second" if secs == 1 else "seconds"

                console.print(f"\n✅ {mins} {min_label}, and {secs} {sec_label} is {dms_to_degrees(mins, secs):.4f} degrees")
                main_messages.separator()
                  

            except ValueError:
                console.print("\n[red]❌ Invalid Entry[/red]. Enter a valid number.")
                continue


            while True:  
                angle_conversion_confirm()
                main_messages.separator()

                try:
                    return_menu = int(input("\n-- "))

                    if return_menu < 1 or return_menu > 2:
                        console.print("\n[red]❌ Out of Range[/red]. Please enter [1 or 2].")
                        main_messages.separator()
                    elif return_menu == 1:
                        break  
                    elif return_menu == 2:
                        console.print("\n[yellow]🚪 Returning to Angle Menu... [/yellow]")
                        return  
                except ValueError:
                    console.print("\n[red]❌ Invalid Entry[/red]. Enter a valid number.")
                    main_messages.separator()
Editor is loading...
Leave a Comment