Как мне написать основную программу, в которой импортируются созданные модули и предлагается выбрать, какую из них исполнять?

Как мне написать основную программу, в которой импортируются созданные модули и предлагается выбрать, какую из них исполнять?

Первый модуль

def size_of_triangle(x):
    """Дана сторона равностороннего треугольника. Найти площадь этого треугольника"""
    S=((pow(x,2)*(3**0.5))/4)
    return S

def string(s):
    """Даны натуральное число n, символы s1 , ..., sn . Исключить из последовательности s1 , ..., sn группы символов, расположенные между скобками (,). Сами скобки тоже должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок."""
    s = input("Введите строку: ")
    print("Нач. строка: ", s)
    res = ''
    f = True
    for sym in s:
        if sym in '()':
            f = not f
        elif f:
                res += sym
                print("Кон. строка: ", res)
                return s
if __name__=='__main__':
    print('1'+size_of_triangle)
    print('2'+string)
    exit()

Второй модуль

def list(l):
    print('Даны натуральные числа n, a1, ..., an. Определить количство членов, являющихся квадратами четных чисел')
import random
def massgen(n):
    mlist = [random.randint(-10, 100) for i in range(n)]
    print(mlist)
    s = 0
    for i in mlist:
        if pow(i,2)%2 == 0:
            s = s + 1
            print(s)
            if __name__ == '__main__':
                massgen(n=9)
                return s,l

if __name__=='__main__':
    print('3'+list.__doc__)
    exit()

Модуль 3

def operations(n,spisok):
    'Введите его номер, Радиус(1), Диаметр(2), Длина(3), Площадь(4)'
    spisok = [[n, n*2, 2*3.14*n, 3.14*pow(n,2)],
            [n, n/2, 3.14*n, pow(n,2)/4*3.14],
             [n, n/(2*3.14), n/3.14, pow(n,2)/(4*3.14)],
              [n, sqrt(n/3.14), 2*sqrt(n/3.14), sqrt(n*4*3.14)]]
    return operations.get(spisok)
if __name__=="__main__":
    print('4 '+operations)
    exit()

Ответы (1 шт):

Автор решения: Vestalt

В python нет возможности выполнить основной код только одного модуля, как если бы вы использовали функции. Интерпретатор по умолчанию исполняет код каждого импортируемого модуля (или не исполняет, если вы защитили его условием if __name__ == "__main__"). Это нельзя настроить программно.

Чтобы решить вашу задачу, можно просто убрать основной код каждого модуля в функции и импортировать именно их. Только тогда вы сможете сделать пользовательский выбор.

Пример:

module_1:

def main_1():
    print('1')


if __name__=='__main__':
    main_1()

module_2:

def main_2():
    print('2')


if __name__=='__main__':
    main_2()

module_3:

def main_3():
    print('3')


if __name__=="__main__":
    main_3()

Основной код:

from module_1 import main_1
from module_2 import main_2
from module_3 import main_3

funcs = {1: main_1,
         2: main_2,
         3: main_3}
number = int(input("Введите номер модуля: "))
funcs[number]()  # Выполнение функции под соответствующим номером

Вам остаётся только исправить ошибки вашего кода и использовать мой шаблон.

→ Ссылка