Próbuję uruchomić moduł z konsoli. Struktura mojego katalogu jest następująca:
Próbuję uruchomić moduł p_03_using_bisection_search.py
z problem_set_02
katalogu przy użyciu:
$ python3 p_03_using_bisection_search.py
Kod wewnątrz p_03_using_bisection_search.py
jest:
__author__ = 'm'
from .p_02_paying_debt_off_in_a_year import compute_balance_after
def compute_bounds(balance: float,
annual_interest_rate: float) -> (float, float):
# there is code here, but I have omitted it to save space
pass
def compute_lowest_payment(balance: float,
annual_interest_rate: float) -> float:
# there is code here, but I have omitted it to save space
pass
def main():
balance = eval(input('Enter the initial balance: '))
annual_interest_rate = eval(input('Enter the annual interest rate: '))
lowest_payment = compute_lowest_payment(balance, annual_interest_rate)
print('Lowest Payment: ' + str(lowest_payment))
if __name__ == '__main__':
main()
Importuję funkcję, w p_02_paying_debt_off_in_a_year.py
której znajduje się kod:
__author__ = 'm'
def compute_balance(balance: float,
fixed_payment: float,
annual_interest_rate: float) -> float:
# this is code that has been omitted
pass
def compute_balance_after(balance: float,
fixed_payment: float,
annual_interest_rate: float,
months: int=12) -> float:
# Omitted code
pass
def compute_fixed_monthly_payment(balance: float,
annual_interest_rate: float) -> float:
# omitted code
pass
def main():
balance = eval(input('Enter the initial balance: '))
annual_interest_rate = eval(
input('Enter the annual interest rate as a decimal: '))
lowest_payment = compute_fixed_monthly_payment(balance,
annual_interest_rate)
print('Lowest Payment: ' + str(lowest_payment))
if __name__ == '__main__':
main()
Otrzymuję następujący błąd:
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
Nie mam pojęcia, jak rozwiązać ten problem. Próbowałem dodać __init__.py
plik, ale nadal nie działa.
eval(input(...
bit został zasugerowany przez 2to3. Zrobiłem to dzisiaj. Cieszę się, że nie podążam za jego sugestiami, oślepiającymi
eval(input...
prawdopodobnie nie jest to świetny pomysł. Po prostu przeanalizuję to, zamiast dać szansę na wykonanie dowolnego kodu.