Почему я не могу импортировать свой модуль в свой основной код?

#python #function #module

#python #функция #модуль

Вопрос:

Я написал некоторый код (названный упражнением 2), где я определяю функцию (с именем is_divisible), и она отлично сработала.

После этого, чтобы узнать, как импортировать функции, я написал тот же код, но без определенной функции, и создал второй модуль (с именем is_divisible ). Но всякий раз, когда я импортирую этот модуль в исходное «упражнение 2», я получаю

Нет модуля с именем ‘is_divisible’

Я проверил, что оба файла python находятся в одной папке, имя файла правильное, и я знаю, что код написан хорошо, потому что он работал раньше, и он принадлежит моему преподавателю. Я также попытался назвать модуль и функцию по-другому и вместо этого написать:

 from divis import is_divisible
  

но это также не увенчалось успехом.

Где я ошибаюсь?Я оставлю код ниже:

 import random
import math
import numpy as np

random_list=[]

for i in range (0,5):
    r=random.randint(0,10)
    random_list.append(r)

print(random_list) #five numbers from 0 to 10 are chosen and appended to a list


new_result=[print('right' for x in random_list if round(np.cosh(x)**2 - np.sinh(x)**2,2) == 1] 
#checking the numbers following a maths rule

import is_divisible  #trying to import the function is_divisible

divisor=3 
idx = is_divisible(random_list, divisor)
for i in idx:
    print(f'Value {random_list[i]} (at index {i}) is divisible by {divisor}')
  

код для функции is_divisible:

 def is_divisible(x, n):
""" Find the indices of x where the element is exactly divisible by n.

Arguments:
x - list of numbers to test
n - single divisor

Returns a list of the indices of x for which the value of the element is
divisible by n (to a precision of 1e-6 in the case of floats).

Example:
>>> is_divisible([3, 1, 3.1415, 6, 7.5], 3)
[0, 3]

"""

r = []
small = 1e-6
for i, m in enumerate(x):
    if m % n < small:
        r.append(i)
return r
  

Я знаю, что на этот вопрос отвечали несколько раз, но ни один из ответов, похоже, не работает для меня, или, может быть, я делаю это неправильно.

Комментарии:

1. Правильный ли ваш отступ для функции is_divisible? и вместо new_result=[print(‘right’ для x в random_list, если round(np.cosh(x)**2 — np.sinh(x) **2,2) == 1] это должно быть new_result=print(‘right’ для x в random_list, если round(np.cosh(x)** 2 — np.sinh(x)** 2,2) == 1)

2. Спасибо за вашу помощь, но отступ, похоже, в порядке, он такой же, как показано выше, без пробелов вообще. И спасибо за второй бит информации, который улучшает работу этого бита (хотя он не должен влиять на остальную часть кода)

3. Вам нужно предоставить больше информации о структуре ваших файлов / каталогов, иначе вам невозможно помочь .. Может быть, возможно, оба файла / модуля расположены внутри пакета? Т.Е. папка, которая содержит «__init__.py «досье? Если это так, вам нужно будет выполнить «from <PACKAGE-NAME>.divis import is_divisible», если только вы не установили пакет, чего, я предполагаю, вы не сделали..

4. Я столкнулся с » init.py «файл, но я, кажется, не понимаю этого. Я уже некоторое время использую python, но просто для построения графиков и анализа данных, и все это для меня очень ново.

Ответ №1:

Как правило, при вводе import <Module> модуля указывается имя файла. Итак, если у вас была функция is_divisible внутри файла Python с именем a.py , то для ее импорта вы напишете from a import is_divisible . Если вместо этого вы хотели бы импортировать весь файл, тогда вы бы написали import a.py , а затем использовали бы функцию, которую вы бы использовали a.is_divisible(random_list, divisor) .

Вы также должны убедиться, что оба файла находятся в одной папке.

Комментарии:

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