Импортированная функция Python работает при импорте из модуля 1, но не работает при импорте из модуля 2.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Импортированная функция Python работает при импорте из модуля 1, но не работает при импорте из модуля 2.

Сообщение Anonymous »

У меня странная проблема, которую я хотел бы понять. Я написал простой генетический код, позволяющий угадать пару букв «ab». Существует цикл, в котором в качестве первого шага используется функция, генерирующая случайных кандидатов. Функция работает и ее легко понять, но она не работает при импорте, только в том случае, если она находится внутри всего модуля генетического кода. Если я напишу другой модуль только с этой функцией и импортирую оттуда, он будет работать нормально.
Что это за черт?
Это код, который я использую для импорта функции:
from scratch_2 import generate_random_candidate

print (generate_random_candidate())

Это Scratch_2:
import random
import string

target = "ab"
letras = string.ascii_lowercase
tried_candidates = set()

def generate_random_candidate():
while True:
intento = random.choice(letras) + random.choice(letras)
if intento not in tried_candidates:
tried_candidates.add(intento)
return intento

Так вот что работает совершенно нормально. А это Scratch_1, когда я импортирую оттуда, я вижу, что функция отладки не работает, если я печатаю try_candidates, я вижу, что она печатает set(), set(), set(), как будто это внутри бесконечного цикла. Это потому, что он вызывает функцию, но не запускает ее код? Связано ли это с переменной try_candidates. Разве одна и та же функция не должна работать независимо от того, в каком модуле она хранится?
Это Scratch_1, если я импортирую функцию из него, она ничего не делает.
import random
import string
import matplotlib.pyplot as plt
import plotly.graph_objects as go
target = "ab"
letras = string.ascii_lowercase
tried_candidates = set()

def generate_random_candidate():
while True:
intento = random.choice(letras) + random.choice(letras)
if intento not in tried_candidates:
tried_candidates.add(intento)
return intento

def generate_children(parent):
hijos = []
while True:
intento = parent[0] + random.choice(letras)
if intento not in tried_candidates:
hijos.append(intento)
break
while True:
intento = random.choice(letras) + parent[1]
if intento not in tried_candidates:
hijos.append(intento)
break
return hijos

def evaluate_candidate(candidate):
score = 0
if candidate[0] == target[0]:
score += 1
if candidate[1] == target[1]:
score += 1
"""
if candidate[0] == target[1]:
score += 0.1
if candidate[1] == target[0]:
score += 0.1
"""

return score

def g ():
tried_candidates = set()
population_size = 10
population = []

for _ in range(population_size):
population.append(generate_random_candidate())
contador = 1

while True:
tried_candidates.update(population)
scores = []
for candidate in population:
scores.append(evaluate_candidate(candidate))
children = []
Flag = False
for i, score in enumerate(scores):
if score == 2:
Flag = True
break
if score == 1 :
x = generate_children(population)
tried_candidates.update(x)
children.extend(generate_children(population))

if len(children) < population_size:
new_candidates = []
for _ in range(population_size - len(children)):
y = generate_random_candidate()
tried_candidates.update(y)
new_candidates.append(y)

children.extend(new_candidates)
population = children

else:
meter = children[population_size:]
population = children[:population_size]
tried_candidates.difference_update(meter)

found = False
for candidate in population:
if evaluate_candidate(candidate) == 2 or Flag == True:
found = True
return contador

contador = contador +1

resultados = []
for i in range (100000):
resultados.append(g())



Подробнее здесь: https://stackoverflow.com/questions/791 ... hen-import
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»